mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-27 12:11:13 +00:00
parse: only escape spaces outside of quotes
When we escape spaces to keep arguments together, only escape when the space is outside a "" string. See https://bugzilla.gnome.org/show_bug.cgi?id=673319
This commit is contained in:
parent
03fae7e32e
commit
fd144c02ab
1 changed files with 9 additions and 1 deletions
|
@ -175,14 +175,21 @@ static gchar *
|
||||||
_gst_parse_escape (const gchar * str)
|
_gst_parse_escape (const gchar * str)
|
||||||
{
|
{
|
||||||
GString *gstr = NULL;
|
GString *gstr = NULL;
|
||||||
|
gboolean in_quotes;
|
||||||
|
|
||||||
g_return_val_if_fail (str != NULL, NULL);
|
g_return_val_if_fail (str != NULL, NULL);
|
||||||
|
|
||||||
gstr = g_string_sized_new (strlen (str));
|
gstr = g_string_sized_new (strlen (str));
|
||||||
|
|
||||||
|
in_quotes = FALSE;
|
||||||
|
|
||||||
while (*str) {
|
while (*str) {
|
||||||
if (*str == ' ')
|
if (*str == '"' && (!in_quotes || (in_quotes && *(str - 1) != '\\')))
|
||||||
|
in_quotes = !in_quotes;
|
||||||
|
|
||||||
|
if (*str == ' ' && !in_quotes)
|
||||||
g_string_append_c (gstr, '\\');
|
g_string_append_c (gstr, '\\');
|
||||||
|
|
||||||
g_string_append_c (gstr, *str);
|
g_string_append_c (gstr, *str);
|
||||||
str++;
|
str++;
|
||||||
}
|
}
|
||||||
|
@ -244,6 +251,7 @@ gst_parse_launchv_full (const gchar ** argv, GstParseContext * context,
|
||||||
argvp = argv;
|
argvp = argv;
|
||||||
while (*argvp) {
|
while (*argvp) {
|
||||||
arg = *argvp;
|
arg = *argvp;
|
||||||
|
GST_DEBUG ("eascaping argument %s", arg);
|
||||||
tmp = _gst_parse_escape (arg);
|
tmp = _gst_parse_escape (arg);
|
||||||
g_string_append (str, tmp);
|
g_string_append (str, tmp);
|
||||||
g_free (tmp);
|
g_free (tmp);
|
||||||
|
|
Loading…
Reference in a new issue