git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] parse_tag_buffer: don't parse invalid tags

From
MKMartin Koegler <mkoegler@auto.tuwien.ac.at>
Date
Jan 6, 2008, 19:03 UTC
Message-ID
<11996461912682-git-send-email-mkoegler@auto.tuwien.ac.at>

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>
---
 tag.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/tag.c b/tag.c
index f62bcdd..fa22ae6 100644
--- a/tag.c
+++ b/tag.c
@@ -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;
@@ -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++;
-- 
1.4.4.4
Next: Martin Koegler
Message 1 of 4 in “parse_tag_buffer: don't parse invalid tags”
  1. parse_tag_buffer: don't parse invalid tagsMartin Koegler, Jan 6, 2008
  2. parse_commit_buffer: don't parse invalid commitsMartin Koegler, Jan 6, 2008
  3. Junio C HamanoJan 6, 2008
  4. Martin KoeglerJan 7, 2008

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.