threads / patch / 32854

patchgit-mergetool: print filename when it contains %

Subject: [PATCH] git-mergetool: print filename when it contains %

## tl;dr

4 messages between Feb 8, 2013 and Feb 8, 2013. Diffs are folded; open one to read it.

replies: 3people: 2as markdown or json

Asheesh Laroia· Feb 8, 2013, 01:16 UTC · lore

Before this change, if git-mergetool was invoked with regard to files with a percent sign (%) in their names, it would print an error. For example, if you were calling mergetool on a file called "%2F":

    printf: %2F: invalid directive

This changes the behavior to pass "%s" to printf as its first argument to avoid processing the filename as a format string.

Signed-off-by: Asheesh Laroia <asheesh@asheesh.org>
---
 git-mergetool.sh |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to git-mergetool.sh +1 −1
diff --git a/git-mergetool.sh b/git-mergetool.sh
index c50e18a..d2b9289 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -440,7 +440,7 @@ then
 fi
 
 printf "Merging:\n"
-printf "$files\n"
+printf "%s" "$files\n"
 
 IFS='
 '
-- 
1.7.10.4
Junio C Hamano· Feb 8, 2013, 17:32 UTC · re: Asheesh Laroia · lore

Re: [PATCH] git-mergetool: print filename when it contains %

Asheesh Laroia <asheesh@asheesh.org> writes:
> Before this change, if git-mergetool was invoked with regard to

Drop "before this change,"; it is clear (and it is a recommended practice) you are first describing what problem you are addressing.

Show 11 quoted lines
> files with a percent sign (%) in their names, it would print an
> error. For example, if you were calling mergetool on a file called
> "%2F":
>
>     printf: %2F: invalid directive
>
> This changes the behavior to pass "%s" to printf as its first argument
> to avoid processing the filename as a format string.
>
> Signed-off-by: Asheesh Laroia <asheesh@asheesh.org>
> ---
Thanks.

As a follow-up to this patch, we may want to perform a systematic audit of

    $ git grep -e 'printf "[^"]*\$[^"]*"'
There is one in git-difftool-helper.sh
    printf "\nViewing: '$MERGED'\n"
and mergetools/p4merge:
    printf "$empty_file"
Show 13 quoted lines
>  git-mergetool.sh |    2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/git-mergetool.sh b/git-mergetool.sh
> index c50e18a..d2b9289 100755
> --- a/git-mergetool.sh
> +++ b/git-mergetool.sh
> @@ -440,7 +440,7 @@ then
>  fi
>  
>  printf "Merging:\n"
> -printf "$files\n"
> +printf "%s" "$files\n"
I think
	printf "%s\n" "$files"
would be clearer.
>  
>  IFS='
>  '
Asheesh Laroia· Feb 8, 2013, 20:58 UTC · re: Junio C Hamano · lore

Re: [PATCH] git-mergetool: print filename when it contains %

On Fri, 8 Feb 2013, Junio C Hamano wrote:
Show 7 quoted lines
> Asheesh Laroia <asheesh@asheesh.org> writes:
>
>> Before this change, if git-mergetool was invoked with regard to
>
> Drop "before this change,"; it is clear (and it is a recommended
> practice) you are first describing what problem you are addressing.
>

Junio, thanks for the quick reply! I agree with your suggestions, and will take a look at addressing them, hopefully by Tuesday or so.

-- Asheesh.
Junio C Hamano· Feb 8, 2013, 21:09 UTC · re: Asheesh Laroia · lore

Re: [PATCH] git-mergetool: print filename when it contains %

Asheesh Laroia <asheesh@asheesh.org> writes:
> Junio, thanks for the quick reply! I agree with your suggestions, and
> will take a look at addressing them, hopefully by Tuesday or so.
FYI, here is what I queued for now.
-- >8 --
From: Asheesh Laroia <asheesh@asheesh.org>
Date: Thu, 7 Feb 2013 17:16:24 -0800
Subject: [PATCH] git-mergetool: print filename when it contains %

If git-mergetool was invoked with files with a percent sign (%) in their names, it would print an error. For example, if you were calling mergetool on a file called "%2F":

    printf: %2F: invalid directive

Do not pass random string to printf as if it were a valid format. Use format string "%s" and pass the string as a data to be formatted instead.

Signed-off-by: Asheesh Laroia <asheesh@asheesh.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 git-mergetool.sh | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to git-mergetool.sh +1 −1
diff --git a/git-mergetool.sh b/git-mergetool.sh
index c50e18a..012afa5 100755
--- a/git-mergetool.sh
+++ b/git-mergetool.sh
@@ -440,7 +440,7 @@ then
 fi
 
 printf "Merging:\n"
-printf "$files\n"
+printf "%s\n" "$files"
 
 IFS='
 '
-- 
1.8.1.3.617.gb5c8e72

← back to recent threads