Hi, I'm mucking around with git while implementing a simple, flat CVS gateway. For tests I created a local remote clone via "git remote add -f -t master -m master origin /local/path" (as described on the git-remote man-page). When running a (wrong) command like "git push origin foo", whereby "foo" is nowhere defined in the refspec list: [remote "origin"] url = /local/path fetch = +refs/heads/master:refs/remotes/origin/master push = +master:refs/heads/sync then git-send-pack segfaults in remote.c/count_refspec_match in the strlen() function, because "pattern" contains garbage. And this is because in match_explicit() we have these lines: if (!matched_src) errs = 1; if (dst_value == NULL) dst_value = matched_src->name; <<- gdb prints from here and with the unknown refspec "foo" both dst_value and matched_src are zero: (gdb) print dst_value $1 = 0x0 (gdb) print *rs $2 = { force = 0, pattern = 0, src = 0x808d680 "foo", dst = 0x0 } (gdb) print matched_src $3 = (struct ref *) 0x0 (gdb) print dst_value $4 = 0x34 <Address 0x34 out of bounds> No idea, why the NULL-pointer dereferenciation doesn't segfault right away, but assigns 0x34 to dst_value. Compiler bug? m. Spec: Linux 2.6.23.1 x86/P4 gcc 4.2.1 (SUSE Linux) (openSuSE 10.3) libc 2.6.1 (20070803) git 1.5.3.4 (compiled with -g -O0) - 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