* 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).