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

[PATCH] parse_tag_buffer(): do not prefixcmp() out of range

From
Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Date
Feb 14, 2011, 13:02 UTC
Message-ID
<1297688571-1962-1-git-send-email-pclouds@gmail.com>
In-Reply-To
<20110212144706.GA25124@do>

There is a check (size < 64) at the beginning of the function, but that only covers object+type lines.

Strictly speaking the current code is still correct even if it accesses outside 'data' because 'tail' is used right after prefixcmp() calls.

Anyway accessing out of range is not good. Avoid it.
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
 Unfortunately I installed valgrind but could not reproduce t9350.15
 failure.
 Another option is to add prefixncmp(const char *, const char *,int).
 Probably not worth it.
 tag.c |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/tag.c b/tag.c
index ecf7c1e..9318ae5 100644
--- a/tag.c
+++ b/tag.c
@@ -97,7 +97,9 @@ int parse_tag_buffer(struct tag *item, const void *data, unsigned long size)
 		item->tagged = NULL;
 	}
 
-	if (prefixcmp(bufptr, "tag "))
+	if (bufptr + 4 < tail && !prefixcmp(bufptr, "tag "))
+		; 		/* good */
+	else
 		return -1;
 	bufptr += 4;
 	nl = memchr(bufptr, '\n', tail - bufptr);
@@ -106,7 +108,7 @@ int parse_tag_buffer(struct tag *item, const void *data, unsigned long size)
 	item->tag = xmemdupz(bufptr, nl - bufptr);
 	bufptr = nl + 1;
 
-	if (!prefixcmp(bufptr, "tagger "))
+	if (bufptr + 7 < tail && !prefixcmp(bufptr, "tagger "))
 		item->date = parse_tag_date(bufptr, tail);
 	else
 		item->date = 0;
-- 
1.7.4.74.g639db
Previous: Nguyen Thai Ngoc DuyNext: Junio C Hamano
Message 5 of 9 in “Add const to parse_{commit,tag}_buffer()”
  1. 1/2 Add const to parse_{commit,tag}_buffer()Nguyễn Thái Ngọc Duy, Feb 5, 2011
  2. 2/2 Make hash-object more robust against malformed objectsNguyễn Thái Ngọc Duy, Feb 5, 2011
  3. Thomas RastFeb 12, 2011
  4. Nguyen Thai Ngoc DuyFeb 12, 2011
  5. parse_tag_buffer(): do not prefixcmp() out of rangeNguyễn Thái Ngọc Duy, Feb 14, 2011
  6. Junio C HamanoFeb 15, 2011
  7. Nguyen Thai Ngoc DuyFeb 16, 2011
  8. René ScharfeFeb 17, 2011
  9. parse_tag_buffer(): avoid out of bound accessNguyễn Thái Ngọc Duy, Feb 18, 2011

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.