Merge branch 'jk/getwholeline-getdelim-empty' into maint

strbuf_getwholeline() did not NUL-terminate the buffer on certain
corner cases in its error codepath.

* jk/getwholeline-getdelim-empty:
  strbuf_getwholeline: NUL-terminate getdelim buffer on error
This commit is contained in:
Junio C Hamano 2016-04-14 18:57:46 -07:00
commit f55f97cb33
2 changed files with 11 additions and 1 deletions

View File

@ -481,9 +481,15 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
if (errno == ENOMEM) if (errno == ENOMEM)
die("Out of memory, getdelim failed"); die("Out of memory, getdelim failed");
/* Restore slopbuf that we moved out of the way before */ /*
* Restore strbuf invariants; if getdelim left us with a NULL pointer,
* we can just re-init, but otherwise we should make sure that our
* length is empty, and that the result is NUL-terminated.
*/
if (!sb->buf) if (!sb->buf)
strbuf_init(sb, 0); strbuf_init(sb, 0);
else
strbuf_reset(sb);
return EOF; return EOF;
} }
#else #else

View File

@ -55,6 +55,10 @@ test_expect_success 'empty stream succeeds' '
git fast-import </dev/null git fast-import </dev/null
' '
test_expect_success 'truncated stream complains' '
echo "tag foo" | test_must_fail git fast-import
'
test_expect_success 'A: create pack from stdin' ' test_expect_success 'A: create pack from stdin' '
test_tick && test_tick &&
cat >input <<-INPUT_END && cat >input <<-INPUT_END &&