git-am: use printf instead of echo on user-supplied strings
authorJeff King <peff@peff.net>
Sat, 26 May 2007 03:42:36 +0000 (23:42 -0400)
committerJunio C Hamano <junkio@cox.net>
Sat, 26 May 2007 04:43:33 +0000 (21:43 -0700)
Under some implementations of echo (such as that provided by
dash), backslash escapes are recognized without any other
options. This means that echo-ing user-supplied strings may
cause any backslash sequences in them to be converted. Using
printf resolves the ambiguity.

This bug can be seen when using git-am to apply a patch
whose subject contains the character sequence "\n"; the
characters are converted to a literal newline. Noticed by
Szekeres Istvan.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <junkio@cox.net>
git-am.sh

index c9f66e278454374714794477be7ff8b93cd05a0f..543efd0ad3512d09081432c4590af7575f93dd1f 100755 (executable)
--- a/git-am.sh
+++ b/git-am.sh
@@ -331,7 +331,7 @@ do
                ADD_SIGNOFF=
            fi
            {
-               echo "$SUBJECT"
+               printf '%s\n' "$SUBJECT"
                if test -s "$dotest/msg-clean"
                then
                        echo
@@ -394,7 +394,7 @@ do
        fi
 
        echo
-       echo "Applying '$SUBJECT'"
+       printf 'Applying %s\n' "$SUBJECT"
        echo
 
        case "$resolved" in