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

[PATCH 1/5] mktag.c: adjust verify_tag parameters

From
drafnel@gmail.com <drafnel@gmail.com>
Date
May 9, 2008, 02:19 UTC
Message-ID
<3712867.1210299524581.JavaMail.teamon@b301.teamon.com>
In-Reply-To
<1210299589-10448-1-git-send-email-drafnel@example.com>
From: Brandon Casey <casey@nrlssc.navy.mil>
The size parameter should be a size_t since it is a string length.

There is no reason that the buffer argument should not be constant except for the nul termination that is performed in the first few lines of this function. This is not necessary, since a valid c string must always be nul terminated and we can check whether we have exceeded the caller's size parameter at the end of parsing the buffer.

Signed-off-by: Brandon Casey <casey@nrlssc.navy.mil>
---
 mktag.c |   11 ++++++++---
 1 files changed, 8 insertions(+), 3 deletions(-)
diff --git a/mktag.c b/mktag.c
index 0b34341..5489ad6 100644
--- a/mktag.c
+++ b/mktag.c
@@ -39,7 +39,7 @@ static int verify_object(unsigned char *sha1, const char *expected_type)
 #define PD_FMT "%td"
 #endif
 
-static int verify_tag(char *buffer, unsigned long size)
+static int verify_tag(const char *buffer, size_t size)
 {
 	int typelen;
 	char type[20];
@@ -50,8 +50,6 @@ static int verify_tag(char *buffer, unsigned long size)
 	if (size < 84)
 		return error("wanna fool me ? you obviously got the size wrong !");
 
-	buffer[size] = 0;
-
 	/* Verify object line */
 	object = buffer;
 	if (memcmp(object, "object ", 7))
@@ -145,6 +143,13 @@ static int verify_tag(char *buffer, unsigned long size)
 		return error("char" PD_FMT ": trailing garbage in tag header",
 			tagger_line - buffer);
 
+	/*
+	 * Make sure we haven't advanced past what the caller said the
+	 * buffer size was.
+	 */
+	if (tagger_line - buffer >= size)
+		return error("char" PD_FMT ": tag truncated", size);
+
 	/* The actual stuff afterwards we don't care about.. */
 	return 0;
 }
-- 
1.5.5.67.g9a49
Next: Junio C Hamano
Message 1 of 13 in “mktag.c: adjust verify_tag parameters”
  1. 1/5 mktag.c: adjust verify_tag parametersdrafnel@gmail.com, May 9, 2008
  2. Junio C HamanoMay 11, 2008
  3. Brandon CaseyMay 12, 2008
  4. 2/5 Make mktag a builtin.drafnel@gmail.com, May 9, 2008
  5. Junio C HamanoMay 11, 2008
  6. Junio C HamanoMay 11, 2008
  7. Brandon CaseyMay 12, 2008
  8. Johannes SchindelinMay 12, 2008
  9. Brandon CaseyMay 12, 2008
  10. Junio C HamanoMay 12, 2008
  11. 3/5 mktag.c: rename verify_tag to verify_tag_bufferdrafnel@gmail.com, May 9, 2008
  12. 4/5 mktag.c: consolidate tag functions by merging mktag.c into builtin-tag.cdrafnel@gmail.com, May 9, 2008
  13. 5/5 git-tag: call verify_tag_buffer to validate the generated tag objectdrafnel@gmail.com, May 9, 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.