From: Junio C Hamano <junkio@cox.net>
Date: Sun, 12 Feb 2006 02:51:19 +0000 (-0800)
Subject: hashtable-based objects: minimum fixups.
X-Git-Tag: v1.2.0~7
X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b796360acbdf3186ab9a5dcb84fe416eda4ffd5;p=git

hashtable-based objects: minimum fixups.

Calling hashtable_index from find_object before objs is created
would result in division by zero failure.  Avoid it.

Also the given object name may not be aligned suitably for
unsigned int; avoid dereferencing casted pointer.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---

diff --git a/object.c b/object.c
index 3259862ab2..c3616da813 100644
--- a/object.c
+++ b/object.c
@@ -13,17 +13,19 @@ int track_object_refs = 1;
 
 static int hashtable_index(const unsigned char *sha1)
 {
-	unsigned int i = *(unsigned int *)sha1;
+	unsigned int i;
+	memcpy(&i, sha1, sizeof(unsigned int));
 	return (int)(i % obj_allocs);
 }
 
 static int find_object(const unsigned char *sha1)
 {
-	int i = hashtable_index(sha1);
+	int i;
 
 	if (!objs)
 		return -1;
 
+	i = hashtable_index(sha1);
 	while (objs[i]) {
 		if (memcmp(sha1, objs[i]->sha1, 20) == 0)
 			return i;