git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* read_branches_file ()
@ 2008-02-08 15:50 H.Merijn Brand
  2008-02-08 16:03 ` H.Merijn Brand
  2008-02-08 17:18 ` Daniel Barkalow
  0 siblings, 2 replies; 7+ messages in thread
From: H.Merijn Brand @ 2008-02-08 15:50 UTC (permalink / raw)
  To: git

I'm (again) trying to port git-1.5.4 to HP-UX, and I've already got rather
far, but I'm hitting some stuff I cannot explain.

t5405-send-pack-rewind.sh fails the 'git fetch .. master:master' part in
the setup, as deep down, read_branches_file () is called with in remote
the name "..".

The file that it tries to open using git_path () is ".git/branches/.."
That is weird. That is not a file, but a dir. "../.git/branches" would
be more logical, but whatever. HP-UX 11.00 will gladly return a valid
FILE * for opening a directory with fopen (), which, when read, will
return anything but what is expected. So, maybe read_branches_file ()
should be protected against opening anything but files. Maybe with some
stat () and S_ISREG ()'s.

Or has something gone wrong earlier on?

In my case, the returned url is 'l', which cannot be opened:

fatal: 'l': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

which is cast from upload-pack.c:main ()

-- 
H.Merijn Brand         Amsterdam Perl Mongers (http://amsterdam.pm.org/)
using & porting perl 5.6.2, 5.8.x, 5.10.x  on HP-UX 10.20, 11.00, 11.11,
& 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin.       http://qa.perl.org
http://mirrors.develooper.com/hpux/            http://www.test-smoke.org
                        http://www.goldmark.org/jeff/stupid-disclaimers/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-08 15:50 read_branches_file () H.Merijn Brand
@ 2008-02-08 16:03 ` H.Merijn Brand
  2008-02-08 16:22   ` Johannes Schindelin
  2008-02-11 10:00   ` Andreas Ericsson
  2008-02-08 17:18 ` Daniel Barkalow
  1 sibling, 2 replies; 7+ messages in thread
From: H.Merijn Brand @ 2008-02-08 16:03 UTC (permalink / raw)
  To: git

On Fri, 8 Feb 2008 16:50:08 +0100, "H.Merijn Brand" <h.m.brand@xs4all.nl>
wrote:

> I'm (again) trying to port git-1.5.4 to HP-UX, and I've already got rather
> far, but I'm hitting some stuff I cannot explain.
> 
> t5405-send-pack-rewind.sh fails the 'git fetch .. master:master' part in
> the setup, as deep down, read_branches_file () is called with in remote
> the name "..".
> 
> The file that it tries to open using git_path () is ".git/branches/.."
> That is weird. That is not a file, but a dir. "../.git/branches" would
> be more logical, but whatever. HP-UX 11.00 will gladly return a valid
> FILE * for opening a directory with fopen (), which, when read, will
> return anything but what is expected. So, maybe read_branches_file ()
> should be protected against opening anything but files. Maybe with some
> stat () and S_ISREG ()'s.

Something like this seems so `fix' this specific problem.
Feel free to take another approach, t5405 now passes

--8<--- remote.c.diff
--- remote.c.org        2008-01-27 09:04:18 +0100
+++ remote.c    2008-02-08 17:01:09 +0100
@@ -1,6 +1,7 @@
 #include "cache.h"
 #include "remote.h"
 #include "refs.h"
+#include <sys/stat.h>

 static struct remote **remotes;
 static int allocated_remotes;
@@ -173,11 +174,15 @@ static void read_branches_file(struct re
        char *frag;
        char *branch;
        int n = slash ? slash - remote->name : 1000;
-       FILE *f = fopen(git_path("branches/%.*s", n, remote->name), "r");
+       char *gp = git_path ("branches/%.*s", n, remote->name);
+       struct stat st_buf;
+       FILE *f;
        char *s, *p;
        int len;

-       if (!f)
+       if (stat (gp, &st_buf) || S_ISDIR (st_buf.st_mode))
+               return;
+       if (!(f = fopen(gp, "r")))
                return;
        s = fgets(buffer, BUF_SIZE, f);
        fclose(f);
-->8---

> Or has something gone wrong earlier on?
> 
> In my case, the returned url is 'l', which cannot be opened:
> 
> fatal: 'l': unable to chdir or not a git archive
> fatal: The remote end hung up unexpectedly
> 
> which is cast from upload-pack.c:main ()

-- 
H.Merijn Brand         Amsterdam Perl Mongers (http://amsterdam.pm.org/)
using & porting perl 5.6.2, 5.8.x, 5.10.x  on HP-UX 10.20, 11.00, 11.11,
& 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin.       http://qa.perl.org
http://mirrors.develooper.com/hpux/            http://www.test-smoke.org
                        http://www.goldmark.org/jeff/stupid-disclaimers/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-08 16:03 ` H.Merijn Brand
@ 2008-02-08 16:22   ` Johannes Schindelin
  2008-02-08 16:49     ` H.Merijn Brand
  2008-02-11 10:00   ` Andreas Ericsson
  1 sibling, 1 reply; 7+ messages in thread
From: Johannes Schindelin @ 2008-02-08 16:22 UTC (permalink / raw)
  To: H.Merijn Brand; +Cc: git

Hi,

On Fri, 8 Feb 2008, H.Merijn Brand wrote:

> --8<--- remote.c.diff
> --- remote.c.org        2008-01-27 09:04:18 +0100
> +++ remote.c    2008-02-08 17:01:09 +0100
> @@ -1,6 +1,7 @@
>  #include "cache.h"
>  #include "remote.h"
>  #include "refs.h"
> +#include <sys/stat.h>

This should not be necessary; we include all system headers in cache.h.

> @@ -173,11 +174,15 @@ static void read_branches_file(struct re
>         char *frag;
>         char *branch;
>         int n = slash ? slash - remote->name : 1000;
> -       FILE *f = fopen(git_path("branches/%.*s", n, remote->name), "r");
> +       char *gp = git_path ("branches/%.*s", n, remote->name);

Please use a more descriptive variable name, such as "branches_file" or 
"branches_path".

Also, we only leave a space after operators like "for", "while", but not 
after function names.

> +       if (stat (gp, &st_buf) || S_ISDIR (st_buf.st_mode))

Again, please remove the spaces after "stat" and "S_ISDIR".

Other than that, the patch looks obviously correct: please resubmit with a 
nice commit message and a sign-off.

Thanks,
Dscho

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-08 16:22   ` Johannes Schindelin
@ 2008-02-08 16:49     ` H.Merijn Brand
  0 siblings, 0 replies; 7+ messages in thread
From: H.Merijn Brand @ 2008-02-08 16:49 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: git

On Fri, 8 Feb 2008 16:22:45 +0000 (GMT), Johannes Schindelin
<Johannes.Schindelin@gmx.de> wrote:

> Hi,
> 
> On Fri, 8 Feb 2008, H.Merijn Brand wrote:
> 
> > --8<--- remote.c.diff
> > --- remote.c.org        2008-01-27 09:04:18 +0100
> > +++ remote.c    2008-02-08 17:01:09 +0100
> > @@ -1,6 +1,7 @@
> >  #include "cache.h"
> >  #include "remote.h"
> >  #include "refs.h"
> > +#include <sys/stat.h>
> 
> This should not be necessary; we include all system headers in cache.h.

dropped

> > @@ -173,11 +174,15 @@ static void read_branches_file(struct re
> >         char *frag;
> >         char *branch;
> >         int n = slash ? slash - remote->name : 1000;
> > -       FILE *f = fopen(git_path("branches/%.*s", n, remote->name), "r");
> > +       char *gp = git_path ("branches/%.*s", n, remote->name);
> 
> Please use a more descriptive variable name, such as "branches_file" or 
> "branches_path".

took another approach, as that also addresses the other fopen () call

> Also, we only leave a space after operators like "for", "while", but not 
> after function names.

This patch was not sent to be applied as-is, only as a proof-of-concept
Not that I agree to the layout/indentation, the new patch is sent trying
to follow what you use.

> > +       if (stat (gp, &st_buf) || S_ISDIR (st_buf.st_mode))
> 
> Again, please remove the spaces after "stat" and "S_ISDIR".

you said please :)

> Other than that, the patch looks obviously correct: please resubmit with a 
> nice commit message and a sign-off.

Done

-- 
H.Merijn Brand         Amsterdam Perl Mongers (http://amsterdam.pm.org/)
using & porting perl 5.6.2, 5.8.x, 5.10.x  on HP-UX 10.20, 11.00, 11.11,
& 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin.       http://qa.perl.org
http://mirrors.develooper.com/hpux/            http://www.test-smoke.org
                        http://www.goldmark.org/jeff/stupid-disclaimers/

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-08 15:50 read_branches_file () H.Merijn Brand
  2008-02-08 16:03 ` H.Merijn Brand
@ 2008-02-08 17:18 ` Daniel Barkalow
  1 sibling, 0 replies; 7+ messages in thread
From: Daniel Barkalow @ 2008-02-08 17:18 UTC (permalink / raw)
  To: H.Merijn Brand; +Cc: git

On Fri, 8 Feb 2008, H.Merijn Brand wrote:

> I'm (again) trying to port git-1.5.4 to HP-UX, and I've already got rather
> far, but I'm hitting some stuff I cannot explain.
> 
> t5405-send-pack-rewind.sh fails the 'git fetch .. master:master' part in
> the setup, as deep down, read_branches_file () is called with in remote
> the name "..".
> 
> The file that it tries to open using git_path () is ".git/branches/.."
> That is weird. That is not a file, but a dir. "../.git/branches" would
> be more logical, but whatever. HP-UX 11.00 will gladly return a valid
> FILE * for opening a directory with fopen (), which, when read, will
> return anything but what is expected. So, maybe read_branches_file ()
> should be protected against opening anything but files. Maybe with some
> stat () and S_ISREG ()'s.
> 
> Or has something gone wrong earlier on?

It's doing this because it thinks you might have a remote configured with 
the name "..", which should probably be blocked at a higher level, if only 
for general sanity.

	-Daniel
*This .sig left intentionally blank*

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-08 16:03 ` H.Merijn Brand
  2008-02-08 16:22   ` Johannes Schindelin
@ 2008-02-11 10:00   ` Andreas Ericsson
  2008-02-11 10:17     ` H.Merijn Brand
  1 sibling, 1 reply; 7+ messages in thread
From: Andreas Ericsson @ 2008-02-11 10:00 UTC (permalink / raw)
  To: H.Merijn Brand; +Cc: git

H.Merijn Brand wrote:
> -       if (!f)
> +       if (stat (gp, &st_buf) || S_ISDIR (st_buf.st_mode))

Shouldn't this be
	if (stat(gp, &st_buf) || !S_ISREG(st_buf.st_mode))

?

Otherwise, you might end up opening a FIFO, a socket or a
block/char special, which is obviously undesired.

-- 
Andreas Ericsson                   andreas.ericsson@op5.se
OP5 AB                             www.op5.se
Tel: +46 8-230225                  Fax: +46 8-230231

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: read_branches_file ()
  2008-02-11 10:00   ` Andreas Ericsson
@ 2008-02-11 10:17     ` H.Merijn Brand
  0 siblings, 0 replies; 7+ messages in thread
From: H.Merijn Brand @ 2008-02-11 10:17 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: git

On Mon, 11 Feb 2008 11:00:52 +0100, Andreas Ericsson <ae@op5.se> wrote:

> H.Merijn Brand wrote:
> > -       if (!f)
> > +       if (stat (gp, &st_buf) || S_ISDIR (st_buf.st_mode))
> 
> Shouldn't this be
> 	if (stat(gp, &st_buf) || !S_ISREG(st_buf.st_mode))

Yes, see several follow-ups in this thread.

> ?
> 
> Otherwise, you might end up opening a FIFO, a socket or a
> block/char special, which is obviously undesired.

At the moment of the patch I was unsure if these were supported :)
At least FIFO's and character devices are less error-prone than DIR's

-- 
H.Merijn Brand         Amsterdam Perl Mongers (http://amsterdam.pm.org/)
using & porting perl 5.6.2, 5.8.x, 5.10.x  on HP-UX 10.20, 11.00, 11.11,
& 11.23, SuSE 10.1 & 10.2, AIX 5.2, and Cygwin.       http://qa.perl.org
http://mirrors.develooper.com/hpux/            http://www.test-smoke.org
                        http://www.goldmark.org/jeff/stupid-disclaimers/

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2008-02-11 10:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-02-08 15:50 read_branches_file () H.Merijn Brand
2008-02-08 16:03 ` H.Merijn Brand
2008-02-08 16:22   ` Johannes Schindelin
2008-02-08 16:49     ` H.Merijn Brand
2008-02-11 10:00   ` Andreas Ericsson
2008-02-11 10:17     ` H.Merijn Brand
2008-02-08 17:18 ` Daniel Barkalow

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).