Thread (1 message) 1 message, 1 author, 2016-06-15

Re: [PATCH 1/6] path.c: allocate enough memory for string

From: Junio C Hamano <hidden>
Date: 2016-06-15 23:09:07

Stefan Beller [off-list ref] writes:
On Tue, Mar 29, 2016 at 5:57 PM, Eric Sunshine [off-list ref] wrote:
quoted
On Tue, Mar 29, 2016 at 8:38 PM, Stefan Beller [off-list ref] wrote:
quoted
`strlen` returns the length of a string without the terminating null byte.
To make sure enough memory is allocated we need to pass `strlen(..) + 1`
to the allocation function.

Signed-off-by: Stefan Beller <redacted>
---
diff --git a/path.c b/path.c
@@ -155,7 +155,7 @@ static struct trie *make_trie_node(const char *key, void *value)
        struct trie *new_node = xcalloc(1, sizeof(*new_node));
        new_node->len = strlen(key);
        if (new_node->len) {
-               new_node->contents = xmalloc(new_node->len);
+               new_node->contents = xmalloc(new_node->len + 1);
                memcpy(new_node->contents, key, new_node->len);
Huh? This is a trie. It never accesses 'contents' as a NUL-terminated
string. Plus, no NUL is ever even copied, thus this is just
overallocating. How is this an improvement?
By using strlen, I assumed it was a standard C string.
I missed that, though.
You took hint from a wrong place.  You are auditing the destination
buffer, so the correct place to take hint from is the memcpy() that
touches the destination.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help