Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-11-26 03:35:20 +0300
committerJunio C Hamano <junkio@cox.net>2005-11-26 03:35:20 +0300
commit93dcab2937624ebb97f91807576cddb242a55a46 (patch)
tree8d16464f16866a7f215401a95f8bdaa124799d49 /update-index.c
parent52b6536c624b4998b3730b55b9bc3d7c4e1071a4 (diff)
parent2a1ddc58e4d2220feea7eba4623dac07a0f83f94 (diff)
GIT 0.99.9kv0.99.9k
This is not 1.0rc4 yet, but to push the recent fixes out. Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'update-index.c')
-rw-r--r--update-index.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/update-index.c b/update-index.c
index 5bbc3de289..11b7f6a516 100644
--- a/update-index.c
+++ b/update-index.c
@@ -338,7 +338,7 @@ static void read_index_info(int line_termination)
struct strbuf buf;
strbuf_init(&buf);
while (1) {
- char *ptr;
+ char *ptr, *tab;
char *path_name;
unsigned char sha1[20];
unsigned int mode;
@@ -348,12 +348,15 @@ static void read_index_info(int line_termination)
break;
mode = strtoul(buf.buf, &ptr, 8);
- if (ptr == buf.buf || *ptr != ' ' ||
- get_sha1_hex(ptr + 1, sha1) ||
- ptr[41] != '\t')
+ if (ptr == buf.buf || *ptr != ' ')
goto bad_line;
- ptr += 42;
+ tab = strchr(ptr, '\t');
+ if (!tab || tab - ptr < 41)
+ goto bad_line;
+ if (get_sha1_hex(tab - 40, sha1) || tab[-41] != ' ')
+ goto bad_line;
+ ptr = tab + 1;
if (line_termination && ptr[0] == '"')
path_name = unquote_c_style(ptr, NULL);