summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bac9c06)
raw | patch | inline | side by side (parent: bac9c06)
author | Jim Meyering <jim@meyering.net> | |
Thu, 26 May 2011 13:54:18 +0000 (15:54 +0200) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Thu, 26 May 2011 18:07:52 +0000 (11:07 -0700) |
If we reach EOF after the SHA1-then-TAB, yet before the NUL that
terminates each file name, we would fill the file name buffer with \255
bytes resulting from the repeatedly-failing fgetc (returns EOF/-1) and
ultimately complain about "filename too long", because no NUL was
encountered.
Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
terminates each file name, we would fill the file name buffer with \255
bytes resulting from the repeatedly-failing fgetc (returns EOF/-1) and
ultimately complain about "filename too long", because no NUL was
encountered.
Signed-off-by: Jim Meyering <jim@meyering.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
rerere.c | patch | blob | history |
diff --git a/rerere.c b/rerere.c
index d2608434750c336c3f3881efda8373b7c67d4b11..283a0024b05706b98e8056ac20258bf9248b80c7 100644 (file)
--- a/rerere.c
+++ b/rerere.c
name = xstrdup(buf);
if (fgetc(in) != '\t')
die("corrupt MERGE_RR");
- for (i = 0; i < sizeof(buf) && (buf[i] = fgetc(in)); i++)
- ; /* do nothing */
+ for (i = 0; i < sizeof(buf); i++) {
+ int c = fgetc(in);
+ if (c < 0)
+ die("corrupt MERGE_RR");
+ buf[i] = c;
+ if (c == 0)
+ break;
+ }
if (i == sizeof(buf))
die("filename too long");
string_list_insert(rr, buf)->util = name;