git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] gittrack.sh accepts invalid branch names

From
PRPavel Roskin <proski@gnu.org>
Date
Apr 21, 2005, 01:28 UTC
Message-ID
<1114046931.20044.11.camel@dv>
In-Reply-To
<20050420232110.GA12962@pasky.ji.cz>
Hi, Petr!
On Thu, 2005-04-21 at 01:21 +0200, Petr Baudis wrote:
Show 17 quoted lines
> Dear diary, on Wed, Apr 20, 2005 at 09:48:30PM CEST, I got a letter
> where Pavel Roskin <proski@gnu.org> told me that...
> > --- a/gittrack.sh
> > +++ b/gittrack.sh
> > @@ -35,7 +35,7 @@ die () {
> >  mkdir -p .git/heads
> >  
> >  if [ "$name" ]; then
> > -	grep -q $(echo -e "^$name\t" | sed 's/\./\\./g') .git/remotes || \
> > +	sed -ne "/^$name\t/p" .git/remotes | grep -q . || \
> >  		[ -s ".git/heads/$name" ] || \
> >  		die "unknown branch \"$name\""
> 
> This fixes the acceptance, but not the choice.
> 
> What does the grep -q . exactly do? Just sets error code based on
> whether the sed output is non-empty?
Yes.
>  What about [] instead?
You'll need another pair of quotes for that:
[ "$(sed -ne "/^$name\t/p" .git/remotes)" ]; echo $?

If I remember correctly from my Autoconf hacking experience, not all shells like mixing quotes and command substitution, and even bash treated this differently in different versions. I can do more research, but it seems just too fragile to me.

Another thing I remember is that "case" would not need quotes. For some historic reasons, the expression between "case" and "in" is subjected to command substitution, but not word expansion.

So the patch becomes:
--- a/gittrack.sh
+++ b/gittrack.sh
@@ -35,9 +35,11 @@ die () {
 mkdir -p .git/heads
 
 if [ "$name" ]; then
-	grep -q $(echo -e "^$name\t" | sed 's/\./\\./g') .git/remotes || \
+	case x$(sed -ne "/^$name\t/p" .git/remotes) in
+	x)
 		[ -s ".git/heads/$name" ] || \
-		die "unknown branch \"$name\""
+		die "unknown branch \"$name\"" ;;
+	esac
 
 	echo $name >.git/tracking
 
Looks rather ugly for my taste, but just in case:
Signed-off-by: Pavel Roskin <proski@gnu.org>

By the way, please check all references to .git/remotes - this bug is
not specific to gittrack.sh.
-- 
Regards,
Pavel Roskin
Previous: Petr BaudisNext: Paul Jackson
Message 3 of 4 in “gittrack.sh accepts invalid branch names”
  1. gittrack.sh accepts invalid branch namesPavel Roskin, Apr 20, 2005
  2. Petr BaudisApr 20, 2005
  3. Pavel RoskinApr 21, 2005
  4. Paul JacksonApr 20, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.