From be0d811942f1752cf638173692c05095a35209eb Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Sat, 21 Jan 2023 19:51:24 +0000 Subject: [PATCH] argvsplit: fix some quoting rules to match POSIX --- libpkgconf/argvsplit.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libpkgconf/argvsplit.c b/libpkgconf/argvsplit.c index 99cb430..b47a3d9 100644 --- a/libpkgconf/argvsplit.c +++ b/libpkgconf/argvsplit.c @@ -80,7 +80,7 @@ pkgconf_argv_split(const char *src, int *argc, char ***argv) if (escaped) { /* POSIX: only \CHAR is special inside a double quote if CHAR is {$, `, ", \, newline}. */ - if (quote) + if (quote == '"') { if (!(*src_iter == '$' || *src_iter == '`' || *src_iter == '"' || *src_iter == '\\')) *dst_iter++ = '\\'; @@ -91,12 +91,12 @@ pkgconf_argv_split(const char *src, int *argc, char ***argv) { /* If we are outside a quoted string/char, an escaped space is usually used to preserve spaces in file names. */ - if (*src_iter != ' ') + if (!(*src_iter == '$' || *src_iter == '`' || *src_iter == '"' || *src_iter == '\\' || *src_iter == ' ')) *dst_iter++ = '\\'; *dst_iter++ = *src_iter; } - + escaped = false; } else if (quote)