diff options
author | Dan Nicholson <dbn.lists@gmail.com> | 2016-01-29 09:52:04 -0800 |
---|---|---|
committer | Dan Nicholson <dbn.lists@gmail.com> | 2016-02-26 08:56:52 -0800 |
commit | 1c564a358303a8396dc71cc92d79bd0ac304b15c (patch) | |
tree | 684fccc480d3643ce8d3c4d33fea267a6485938a /parse.c | |
parent | e6d33fb1294266ff0302fcae23ef89e1d523910d (diff) |
Only unquote --variable when it appears quoted
The change to unquote values in the --variable output broke users that
had shell special characters in the variable. Instead, only unquote if
the value starts with " or '. A larger fix to do a full unquote, split
and escaping like --cflags/--libs is possible, but that might break the
old semantics even further.
Add a new function, parse_package_variable(), to handle that logic.
https://bugs.freedesktop.org/show_bug.cgi?id=93284
Diffstat (limited to 'parse.c')
-rw-r--r-- | parse.c | 36 |
1 files changed, 36 insertions, 0 deletions
@@ -1145,3 +1145,39 @@ parse_package_file (const char *key, const char *path, return pkg; } + +/* Parse a package variable. When the value appears to be quoted, + * unquote it so it can be more easily used in a shell. Otherwise, + * return the raw value. + */ +char * +parse_package_variable (Package *pkg, const char *variable) +{ + char *value; + char *unquoted; + GError *error = NULL; + + value = package_get_var (pkg, variable); + if (!value) + return NULL; + + if (*value != '"' && *value != '\'') + /* Not quoted, return raw value */ + return value; + + /* Maybe too naive, but assume a fully quoted variable */ + unquoted = g_shell_unquote (value, &error); + if (unquoted) + { + g_free (value); + return unquoted; + } + else + { + /* Note the issue, but just return the raw value */ + debug_spew ("Couldn't unquote value of \"%s\": %s\n", + variable, error ? error->message : "unknown"); + g_clear_error (&error); + return value; + } +} |