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>
Jeff King committed
Sep 24, 2015 at 17:07 UTC
4635768809885bb1c063bc9f9eee38e413f85f0d
1 file changed
+6
-4
path.c
+6
-4
@@ -632,7 +632,7 @@ const char *relative_path(const char *in, const char *prefix,
632
*/
633
const char *remove_leading_path(const char *in, const char *prefix)
634
{
635
- static char buf[PATH_MAX + 1];
635
+ static struct strbuf buf = STRBUF_INIT;
636
int i = 0, j = 0;
637
638
if (!prefix || !prefix[0])
@@ -661,11 +661,13 @@ const char *remove_leading_path(const char *in, const char *prefix)
661
return in;
662
while (is_dir_sep(in[j]))
663
j++;
664
+
665
+ strbuf_reset(&buf);
666
if (!in[j])
665
- strcpy(buf, ".");
667
+ strbuf_addstr(&buf, ".");
668
else
667
- strcpy(buf, in + j);
668
- return buf;
669
+ strbuf_addstr(&buf, in + j);
670
+ return buf.buf;
671
}
672
673
/*