Re: read_branches_file ()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 8 Feb 2008 16:50:08 +0100, "H.Merijn Brand" <h.m.brand@xxxxxxxxx>
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/
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux