git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "H.Merijn Brand" <h.m.brand@xs4all.nl>
To: git@vger.kernel.org
Subject: Re: read_branches_file ()
Date: Fri, 8 Feb 2008 17:03:05 +0100	[thread overview]
Message-ID: <20080208170305.069d43d2@pc09.procura.nl> (raw)
In-Reply-To: <20080208165008.52630d36@pc09.procura.nl>

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/

  reply	other threads:[~2008-02-08 16:03 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-02-08 15:50 read_branches_file () H.Merijn Brand
2008-02-08 16:03 ` H.Merijn Brand [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20080208170305.069d43d2@pc09.procura.nl \
    --to=h.m.brand@xs4all.nl \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).