Properly quote all commandlines we print

Fixes https://github.com/flatpak/flatpak/issues/236
tingping/wmclass
Alexander Larsson 2017-02-21 18:56:11 +01:00
parent d27799518d
commit 082efe8951
5 changed files with 49 additions and 8 deletions

View File

@ -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)

View File

@ -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);

View File

@ -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];

View File

@ -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);

View File

@ -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,