Browse Source

remove_leading_path: use a strbuf for internal storage

This function strcpy's directly into a PATH_MAX-sized
buffer. There's only one caller, which feeds the git_dir into
it, so it's not easy to trigger in practice (even if you fed
a large $GIT_DIR through the environment or .git file, it
would have to actually exist and be accessible on the
filesystem to get to this point). We can fix it by moving to
a strbuf.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 10 years ago committed by Junio C Hamano
parent
commit
4635768809
  1. 10
      path.c

10
path.c

@ -632,7 +632,7 @@ const char *relative_path(const char *in, const char *prefix, @@ -632,7 +632,7 @@ const char *relative_path(const char *in, const char *prefix,
*/
const char *remove_leading_path(const char *in, const char *prefix)
{
static char buf[PATH_MAX + 1];
static struct strbuf buf = STRBUF_INIT;
int i = 0, j = 0;

if (!prefix || !prefix[0])
@ -661,11 +661,13 @@ const char *remove_leading_path(const char *in, const char *prefix) @@ -661,11 +661,13 @@ const char *remove_leading_path(const char *in, const char *prefix)
return in;
while (is_dir_sep(in[j]))
j++;

strbuf_reset(&buf);
if (!in[j])
strcpy(buf, ".");
strbuf_addstr(&buf, ".");
else
strcpy(buf, in + j);
return buf;
strbuf_addstr(&buf, in + j);
return buf.buf;
}

/*

Loading…
Cancel
Save