diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-02-27 10:34:02 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-02-27 10:34:02 -0800 |
commit | 5aebb3e0ef7f06358d1ca224247a5fbc12e99ccc (patch) | |
tree | 0f87dd2f664fce3db950d422073eb914563b127b /quote.c | |
parent | d7db100c18cf6ecdbe724938503b644e3ac8cde9 (diff) | |
parent | ddbbf8eb25065720eefeb31e22f668931fca815b (diff) | |
download | git-5aebb3e0ef7f06358d1ca224247a5fbc12e99ccc.tar.gz |
Merge branch 'jk/sq-dequote-on-bogus-input'
Code to unquote single-quoted string (used in the parser for
configuration files, etc.) did not diagnose bogus input correctly
and produced bogus results instead.
* jk/sq-dequote-on-bogus-input:
sq_dequote: fix extra consumption of source string
Diffstat (limited to 'quote.c')
-rw-r--r-- | quote.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -118,9 +118,15 @@ static char *sq_dequote_step(char *arg, char **next) *next = NULL; return arg; case '\\': - c = *++src; - if (need_bs_quote(c) && *++src == '\'') { - *dst++ = c; + /* + * Allow backslashed characters outside of + * single-quotes only if they need escaping, + * and only if we resume the single-quoted part + * afterward. + */ + if (need_bs_quote(src[1]) && src[2] == '\'') { + *dst++ = src[1]; + src += 2; continue; } /* Fallthrough */ |