Commit bfce470f authored by Øyvind "pippin" Kolås's avatar Øyvind "pippin" Kolås
Browse files

magick-load: use more robust g_spawn_async() instead of system()

This fixes issue #298 by avoiding the shell parsing being invoked at
all, this less brittle than any forms of escaping characters, while
retaining the ability to address all existing files.
parent 96d4a55d
Pipeline #342901 failed with stages
in 1 minute and 49 seconds
......@@ -41,20 +41,23 @@ load_cache (GeglProperties *op_magick_load)
if (!op_magick_load->user_data)
gchar *filename;
gchar *cmd;
GeglNode *graph, *sink, *loader;
GeglBuffer *newbuf = NULL;
/* ImageMagick backed fallback FIXME: make this robust.
* maybe use pipes in a manner similar to the raw loader,
* or at least use a properly unique filename */
char *argv[4] = {"convert", NULL, NULL, NULL};
filename = g_build_filename (g_get_tmp_dir (), "gegl-magick.png", NULL);
cmd = g_strdup_printf ("convert \"%s\"'[0]' \"%s\"",
op_magick_load->path, filename);
if (system (cmd) == -1)
argv[1] = g_strdup_printf ("%s[0]", op_magick_load->path);
argv[2] = filename;
if (!g_spawn_sync (NULL, argv, NULL, G_SPAWN_DEFAULT,
g_warning ("Error executing ImageMagick convert program");
g_free (argv[1]);
graph = gegl_node_new ();
sink = gegl_node_new_child (graph,
......@@ -67,7 +70,6 @@ load_cache (GeglProperties *op_magick_load)
gegl_node_process (sink);
op_magick_load->user_data = (gpointer) newbuf;
g_object_unref (graph);
g_free (cmd);
g_free (filename);
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment