From: Garima Singh <garima.si...@microsoft.com>

The sq_quote_buf_pretty() function does not emit anything when
the incoming string is empty, but the function is to accumulate
command line arguments, properly quoted as necessary, and the
right way to add an argument that is an empty string is to show
it quoted, i.e. ''. We warn the caller with the BUG macro if they
pass in a NULL.

Reported by: Junio Hamano <gits...@pobox.com>
Signed-off-by: Garima Singh <garima.si...@microsoft.com>
---
 quote.c          | 12 ++++++++++++
 t/t0014-alias.sh |  8 ++++++++
 2 files changed, 20 insertions(+)

diff --git a/quote.c b/quote.c
index 7f2aa6faa4..6d0f8a22a9 100644
--- a/quote.c
+++ b/quote.c
@@ -48,6 +48,18 @@ void sq_quote_buf_pretty(struct strbuf *dst, const char *src)
        static const char ok_punct[] = "+,-./:=@_^";
        const char *p;
 
+       /* In case of null tokens, warn the user of the BUG in their call. */
+       if (!src) 
+               BUG("BUG can't append a NULL token to the buffer");
+       
+       /* In case of empty tokens, add a '' to ensure they 
+        * don't get inadvertently dropped. 
+        */
+       if (!*src) {
+               strbuf_addstr(dst, "''");
+               return;
+       }
+
        for (p = src; *p; p++) {
                if (!isalpha(*p) && !isdigit(*p) && !strchr(ok_punct, *p)) {
                        sq_quote_buf(dst, src);
diff --git a/t/t0014-alias.sh b/t/t0014-alias.sh
index a070e645d7..9c176c7cbb 100755
--- a/t/t0014-alias.sh
+++ b/t/t0014-alias.sh
@@ -37,4 +37,12 @@ test_expect_success 'looping aliases - internal execution' '
 #      test_i18ngrep "^fatal: alias loop detected: expansion of" output
 #'
 
+test_expect_success 'run-command parses empty args properly, using 
sq_quote_buf_pretty' '
+       cat >expect <<-EOF &&
+       fatal: cannot change to '\''alias.foo=frotz foo '\'''\'' bar'\'': No 
such file or directory
+       EOF
+       test_expect_code 128 git -C "alias.foo=frotz foo '\'''\'' bar" foo 
2>actual &&
+       test_cmp expect actual
+'
+
 test_done
-- 
gitgitgadget

Reply via email to