Code

fetch--tool: fix uninitialized buffer when reading from stdin
authorJunio C Hamano <junkio@cox.net>
Mon, 26 Feb 2007 19:37:43 +0000 (11:37 -0800)
committerJunio C Hamano <junkio@cox.net>
Wed, 28 Feb 2007 00:12:23 +0000 (16:12 -0800)
The original code allocates too much space and forgets to NUL
terminate the string.

Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-fetch--tool.c

index e9d16e631585c3795ee628ec33997548a01a01b4..5301c3cb783a8d2949ba93e776c4a3166da37c81 100644 (file)
@@ -2,17 +2,24 @@
 #include "refs.h"
 #include "commit.h"
 
-#define CHUNK_SIZE (1048576)
+#define CHUNK_SIZE 1024
 
 static char *get_stdin(void)
 {
+       int offset = 0;
        char *data = xmalloc(CHUNK_SIZE);
-       int offset = 0, read = 0;
-       read = xread(0, data, CHUNK_SIZE);
-       while (read == CHUNK_SIZE) {
-               offset += CHUNK_SIZE;
+
+       while (1) {
+               int cnt = xread(0, data + offset, CHUNK_SIZE);
+               if (cnt < 0)
+                       die("error reading standard input: %s",
+                           strerror(errno));
+               if (cnt == 0) {
+                       data[offset] = 0;
+                       break;
+               }
+               offset += cnt;
                data = xrealloc(data, offset + CHUNK_SIZE);
-               read = xread(0, data + offset, CHUNK_SIZE);
        }
        return data;
 }