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

[PATCH 2/6] test-hashmap: check allocation computation for overflow

From
Jeff King <peff@peff.net>
Date
Feb 14, 2018, 18:06 UTC
Message-ID
<20180214180634.GB9919@sigill.intra.peff.net>
In-Reply-To
<20180214180322.GA9190@sigill.intra.peff.net>

When we allocate the test_entry flex-struct, we have to add up all of the elements that go into the flex array. If these were to overflow a size_t, this would allocate a too-small buffer, which we would then overflow in our memcpy steps.

Since this is just a test-helper, it probably doesn't matter in practice, but we should model the correct technique by using the st_add() macros.

Unfortunately, we cannot use the FLEX_ALLOC() macros here, because we are stuffing two different buffers into a single flex array.

While we're here, let's also swap out "malloc" for our error-checking "xmalloc", and use the preferred "sizeof(*var)" instead of "sizeof(type)".

Signed-off-by: Jeff King <peff@peff.net>
---
 t/helper/test-hashmap.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/t/helper/test-hashmap.c b/t/helper/test-hashmap.c
index b36886bf35..2100877c2b 100644
--- a/t/helper/test-hashmap.c
+++ b/t/helper/test-hashmap.c
@@ -32,8 +32,7 @@ static int test_entry_cmp(const void *cmp_data,
 static struct test_entry *alloc_test_entry(int hash, char *key, int klen,
 		char *value, int vlen)
 {
-	struct test_entry *entry = malloc(sizeof(struct test_entry) + klen
-			+ vlen + 2);
+	struct test_entry *entry = xmalloc(st_add4(sizeof(*entry), klen, vlen, 2));
 	hashmap_entry_init(entry, hash);
 	memcpy(entry->key, key, klen + 1);
 	memcpy(entry->key + klen + 1, value, vlen + 1);
-- 
2.16.1.464.gc4bae515b7
Previous: Code AINext: Jeff King
Message 4 of 11 in “minor test-hashmap fixes”
  1. 0/6 minor test-hashmap fixesJeff King, Feb 14, 2018
  2. 1/6 test-hashmap: use ALLOC_ARRAY rather than bare mallocJeff King, Feb 14, 2018
  3. Code AIFeb 14, 2018
  4. 2/6 test-hashmap: check allocation computation for overflowJeff King, Feb 14, 2018
  5. 3/6 test-hashmap: use xsnprintf rather than snprintfJeff King, Feb 14, 2018
  6. 4/6 test-hashmap: use strbuf_getline rather than fgetsJeff King, Feb 14, 2018
  7. 5/6 test-hashmap: simplify alloc_test_entryJeff King, Feb 14, 2018
  8. Junio C HamanoFeb 14, 2018
  9. 6/6 test-hashmap: use "unsigned int" for hash storageJeff King, Feb 14, 2018
  10. Stefan BellerFeb 14, 2018
  11. Jeff KingFeb 14, 2018

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.