summaryrefslogtreecommitdiff
path: root/tree-walk.c
diff options
context:
space:
mode:
authorbrian m. carlson <sandals@crustytoothpaste.net>2019-01-15 00:39:41 (GMT)
committerJunio C Hamano <gitster@pobox.com>2019-01-15 17:57:41 (GMT)
commit0a3faa45b1d35b227182166769357e0878da8f92 (patch)
treefecb058078395271e6588f24869c1fd4252b2293 /tree-walk.c
parentecbdaf0899161c067986e9d9d564586d4b045d62 (diff)
downloadgit-0a3faa45b1d35b227182166769357e0878da8f92.zip
git-0a3faa45b1d35b227182166769357e0878da8f92.tar.gz
git-0a3faa45b1d35b227182166769357e0878da8f92.tar.bz2
tree-walk: copy object ID before use
In a future commit, the pointer returned by tree_entry_extract will point into the struct tree_desc, causing its lifetime to be bound to that of the struct tree_desc itself. To ensure this code path keeps working, copy the object_id into a local variable so that it lives long enough. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'tree-walk.c')
-rw-r--r--tree-walk.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/tree-walk.c b/tree-walk.c
index 79bafbd..1e040fc 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -498,10 +498,10 @@ static int find_tree_entry(struct tree_desc *t, const char *name, struct object_
int namelen = strlen(name);
while (t->size) {
const char *entry;
- const struct object_id *oid;
+ struct object_id oid;
int entrylen, cmp;
- oid = tree_entry_extract(t, &entry, mode);
+ oidcpy(&oid, tree_entry_extract(t, &entry, mode));
entrylen = tree_entry_len(&t->entry);
update_tree_entry(t);
if (entrylen > namelen)
@@ -512,7 +512,7 @@ static int find_tree_entry(struct tree_desc *t, const char *name, struct object_
if (cmp < 0)
break;
if (entrylen == namelen) {
- oidcpy(result, oid);
+ oidcpy(result, &oid);
return 0;
}
if (name[entrylen] != '/')
@@ -520,10 +520,10 @@ static int find_tree_entry(struct tree_desc *t, const char *name, struct object_
if (!S_ISDIR(*mode))
break;
if (++entrylen == namelen) {
- oidcpy(result, oid);
+ oidcpy(result, &oid);
return 0;
}
- return get_tree_entry(oid, name + entrylen, result, mode);
+ return get_tree_entry(&oid, name + entrylen, result, mode);
}
return -1;
}