summaryrefslogtreecommitdiff
path: root/strbuf.c
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2010-01-13 17:35:31 (GMT)
committerJunio C Hamano <gitster@pobox.com>2010-01-14 17:24:42 (GMT)
commit0a0416a34a7ef5c64f4e0226371e4cab8c1ba982 (patch)
tree76ce0e33cbe408a9ead5d29f66a1ec171a8d106c /strbuf.c
parent902f235378cb2b2f6dd5dd664b9630c95321f0ae (diff)
downloadgit-0a0416a34a7ef5c64f4e0226371e4cab8c1ba982.zip
git-0a0416a34a7ef5c64f4e0226371e4cab8c1ba982.tar.gz
git-0a0416a34a7ef5c64f4e0226371e4cab8c1ba982.tar.bz2
strbuf_expand: convert "%%" to "%"
The only way to safely quote arbitrary text in a pretty-print user format is to replace instances of "%" with "%x25". This is slightly unreadable, and many users would expect "%%" to produce a single "%", as that is what printf format specifiers do. This patch converts "%%" to "%" for all users of strbuf_expand(): (1) git-daemon interpolated paths (2) pretty-print user formats (3) merge driver command lines Case (1) was already doing the conversion itself outside of strbuf_expand(). Case (2) is the intended beneficiary of this patch. Case (3) users probably won't notice, but as this is user-facing behavior, consistently providing the quoting mechanism makes sense. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'strbuf.c')
-rw-r--r--strbuf.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/strbuf.c b/strbuf.c
index a6153dc..6cbc1fc 100644
--- a/strbuf.c
+++ b/strbuf.c
@@ -227,6 +227,12 @@ void strbuf_expand(struct strbuf *sb, const char *format, expand_fn_t fn,
break;
format = percent + 1;
+ if (*format == '%') {
+ strbuf_addch(sb, '%');
+ format++;
+ continue;
+ }
+
consumed = fn(sb, format, context);
if (consumed)
format += consumed;