Merge branch 'jk/getwholeline-getdelim-empty' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 15 Apr 2016 01:57:46 +0000 (18:57 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 15 Apr 2016 01:57:46 +0000 (18:57 -0700)
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

strbuf.c
t/t9300-fast-import.sh
index f60e2ee72ba86cbd6c66622366af4a7faf25e1a0..2c08dbb15381351ede663c1d41ebf3b6838a0c12 100644 (file)
--- a/strbuf.c
+++ b/strbuf.c
@@ -481,9 +481,15 @@ int strbuf_getwholeline(struct strbuf *sb, FILE *fp, int term)
        if (errno == ENOMEM)
                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)
                strbuf_init(sb, 0);
+       else
+               strbuf_reset(sb);
        return EOF;
 }
 #else
index 4c5f3c9d418bf6f85f1067b2cb1481bf941ff954..25bb60b2814320b628d3d12af88ee1d394a94217 100755 (executable)
@@ -55,6 +55,10 @@ test_expect_success 'empty stream succeeds' '
        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_tick &&
        cat >input <<-INPUT_END &&