aboutsummaryrefslogtreecommitdiff
path: root/notes.c
diff options
context:
space:
mode:
authorJohan Herland <johan@herland.net>2009-12-03 04:53:54 +0100
committerJunio C Hamano <gitster@pobox.com>2009-12-03 10:10:35 -0800
commit488bdf2ebe6e99fb30ad958a710b0b3f737b4d0f (patch)
treecf66eb52b97e9ba812f4f1460ac989610403eac4 /notes.c
parent907a0b1e04ea31cb368e9422df93d8ebb0187914 (diff)
downloadgit-488bdf2ebe6e99fb30ad958a710b0b3f737b4d0f.tar.gz
git-488bdf2ebe6e99fb30ad958a710b0b3f737b4d0f.tar.xz
Fix crasher on encountering SHA1-like non-note in notes tree
When loading a notes tree, the code primarily looks for SHA1-like paths whose total length (discounting directory separators) are 40 chars (interpreted as valid note entries) or less (interpreted as subtree entries that may in turn contain note entries when unpacked). However, there is an additional condition that must hold for valid subtree entries: They must be _tree_ objects (duh). This patch adds an appropriate test for this condition, thereby fixing the crash that occured when passing a non-tree object to the tree-walk API. The patch also adds another selftest verifying correct behaviour of non-notes in note trees. Signed-off-by: Johan Herland <johan@herland.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'notes.c')
-rw-r--r--notes.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/notes.c b/notes.c
index 50a4672d7..023adce98 100644
--- a/notes.c
+++ b/notes.c
@@ -331,6 +331,8 @@ static void load_subtree(struct leaf_node *subtree, struct int_node *node,
hashcpy(l->key_sha1, commit_sha1);
hashcpy(l->val_sha1, entry.sha1);
if (len < 20) {
+ if (!S_ISDIR(entry.mode))
+ continue; /* entry cannot be subtree */
l->key_sha1[19] = (unsigned char) len;
type = PTR_TYPE_SUBTREE;
}