forked from Mirrors/flatpak-builder
Properly quote all commandlines we print
Fixes https://github.com/flatpak/flatpak/issues/236tingping/wmclass
parent
d27799518d
commit
082efe8951
|
@ -1239,7 +1239,7 @@ builder_manifest_init_app_dir (BuilderManifest *self,
|
|||
g_ptr_array_add (args, g_strdup (builder_manifest_get_runtime_version (self)));
|
||||
g_ptr_array_add (args, NULL);
|
||||
|
||||
commandline = g_strjoinv (" ", (char **) args->pdata);
|
||||
commandline = flatpak_quote_argv ((const char **) args->pdata);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
|
||||
subp =
|
||||
|
@ -2059,7 +2059,7 @@ builder_manifest_finish (BuilderManifest *self,
|
|||
g_ptr_array_add (args, g_strdup (app_dir_path));
|
||||
g_ptr_array_add (args, NULL);
|
||||
|
||||
commandline = g_strjoinv (" ", (char **) args->pdata);
|
||||
commandline = flatpak_quote_argv ((const char **) args->pdata);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
|
||||
subp =
|
||||
|
@ -2255,7 +2255,7 @@ builder_manifest_create_platform (BuilderManifest *self,
|
|||
|
||||
g_ptr_array_add (args, NULL);
|
||||
|
||||
commandline = g_strjoinv (" ", (char **) args->pdata);
|
||||
commandline = flatpak_quote_argv ((const char **) args->pdata);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
|
||||
subp =
|
||||
|
@ -2578,7 +2578,7 @@ builder_manifest_run (BuilderManifest *self,
|
|||
g_ptr_array_add (args, g_strdup (argv[i]));
|
||||
g_ptr_array_add (args, NULL);
|
||||
|
||||
commandline = g_strjoinv (" ", (char **) args->pdata);
|
||||
commandline = flatpak_quote_argv ((const char **) args->pdata);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
|
||||
if (execvp ((char *) args->pdata[0], (char **) args->pdata) == -1)
|
||||
|
|
|
@ -1461,7 +1461,7 @@ builder_host_spawnv (GFile *dir,
|
|||
int pipefd[2];
|
||||
int i;
|
||||
|
||||
commandline = g_strjoinv (" ", (gchar **) argv);
|
||||
commandline = flatpak_quote_argv ((const char **) argv);
|
||||
g_debug ("Running '%s' on host", commandline);
|
||||
|
||||
connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, error);
|
||||
|
|
|
@ -3593,7 +3593,7 @@ add_dbus_proxy_args (GPtrArray *argv_array,
|
|||
if (!prepend_bwrap_argv_wrapper (dbus_proxy_argv, app_info_fd, &bwrap_args_fd, error))
|
||||
return FALSE;
|
||||
|
||||
commandline = g_strjoinv (" ", (char **) dbus_proxy_argv->pdata);
|
||||
commandline = flatpak_quote_argv ((const char **) dbus_proxy_argv->pdata);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
|
||||
spawn_data.sync_fd = sync_fds[1];
|
||||
|
|
|
@ -1914,6 +1914,45 @@ spawn_exit_cb (GObject *obj,
|
|||
spawn_data_exit (data);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
needs_quoting (const char *arg)
|
||||
{
|
||||
while (*arg != 0)
|
||||
{
|
||||
char c = *arg;
|
||||
if (!g_ascii_isalnum (c) &&
|
||||
!(c == '-' || c == '/' || c == '~' ||
|
||||
c == ':' || c == '.' || c == '_' ||
|
||||
c == '='))
|
||||
return TRUE;
|
||||
arg++;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
char *
|
||||
flatpak_quote_argv (const char *argv[])
|
||||
{
|
||||
GString *res = g_string_new ("");
|
||||
int i;
|
||||
|
||||
for (i = 0; argv[i] != NULL; i++)
|
||||
{
|
||||
if (i != 0)
|
||||
g_string_append_c (res, ' ');
|
||||
|
||||
if (needs_quoting (argv[i]))
|
||||
{
|
||||
g_autofree char *quoted = g_shell_quote (argv[i]);
|
||||
g_string_append (res, quoted);
|
||||
}
|
||||
else
|
||||
g_string_append (res, argv[i]);
|
||||
}
|
||||
|
||||
return g_string_free (res, FALSE);
|
||||
}
|
||||
|
||||
gboolean
|
||||
flatpak_spawn (GFile *dir,
|
||||
char **output,
|
||||
|
@ -1963,8 +2002,8 @@ flatpak_spawnv (GFile *dir,
|
|||
g_subprocess_launcher_set_cwd (launcher, path);
|
||||
}
|
||||
|
||||
commandline = g_strjoinv (" ", (gchar **) argv);
|
||||
g_debug ("Running '%s'", commandline);
|
||||
commandline = flatpak_quote_argv ((const char **)argv);
|
||||
g_debug ("Running: %s", commandline);
|
||||
|
||||
subp = g_subprocess_launcher_spawnv (launcher, argv, error);
|
||||
|
||||
|
|
|
@ -362,6 +362,8 @@ GList *flatpak_list_extensions (GKeyFile *metakey,
|
|||
const char *arch,
|
||||
const char *branch);
|
||||
|
||||
char * flatpak_quote_argv (const char *argv[]);
|
||||
|
||||
gboolean flatpak_spawn (GFile *dir,
|
||||
char **output,
|
||||
GError **error,
|
||||
|
|
Loading…
Reference in New Issue