Skip to content

Commit

Permalink
parse_tag_buffer: don't parse invalid tags
Browse files Browse the repository at this point in the history
The current tag parsing code can access memory outside the tag buffer,
if \n are missing. This patch prevent this behaviour.

Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Martin Koegler authored and gitster committed Jan 7, 2008
1 parent 5162e69 commit a0393ef
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions tag.c
Expand Up @@ -39,6 +39,7 @@ int parse_tag_buffer(struct tag *item, void *data, unsigned long size)
unsigned char sha1[20];
const char *type_line, *tag_line, *sig_line;
char type[20];
const char *start = data;

if (item->object.parsed)
return 0;
Expand All @@ -53,11 +54,11 @@ int parse_tag_buffer(struct tag *item, void *data, unsigned long size)
if (memcmp("\ntype ", type_line-1, 6))
return -1;

tag_line = strchr(type_line, '\n');
tag_line = memchr(type_line, '\n', size - (type_line - start));
if (!tag_line || memcmp("tag ", ++tag_line, 4))
return -1;

sig_line = strchr(tag_line, '\n');
sig_line = memchr(tag_line, '\n', size - (tag_line - start));
if (!sig_line)
return -1;
sig_line++;
Expand Down

0 comments on commit a0393ef

Please sign in to comment.