@@ -319,19 +319,19 @@ static void sort_ref_dir(struct ref_dir *dir);
319319 * (non-recursively), sorting dir if necessary. Return NULL if no
320320 * such entry is found. dir must already be complete.
321321 */
322- static struct ref_entry * search_ref_dir (struct ref_dir * dir , const char * refname )
322+ static struct ref_entry * search_ref_dir (struct ref_dir * dir ,
323+ const char * refname , size_t len )
323324{
324325 struct ref_entry * e , * * r ;
325- int len ;
326326
327327 if (refname == NULL || !dir -> nr )
328328 return NULL ;
329329
330330 sort_ref_dir (dir );
331331
332- len = strlen (refname ) + 1 ;
333- e = xmalloc (sizeof (struct ref_entry ) + len );
332+ e = xmalloc (sizeof (struct ref_entry ) + len + 1 );
334333 memcpy (e -> name , refname , len );
334+ e -> name [len ] = '\0' ;
335335
336336 r = bsearch (& e , dir -> entries , dir -> nr , sizeof (* dir -> entries ), ref_entry_cmp );
337337
@@ -353,7 +353,8 @@ static struct ref_entry *search_ref_dir(struct ref_dir *dir, const char *refname
353353static struct ref_dir * search_for_subdir (struct ref_dir * dir ,
354354 const char * subdirname , int mkdir )
355355{
356- struct ref_entry * entry = search_ref_dir (dir , subdirname );
356+ size_t len = strlen (subdirname );
357+ struct ref_entry * entry = search_ref_dir (dir , subdirname , len );
357358 if (!entry ) {
358359 if (!mkdir )
359360 return NULL ;
@@ -412,7 +413,7 @@ static struct ref_entry *find_ref(struct ref_dir *dir, const char *refname)
412413 dir = find_containing_dir (dir , refname , 0 );
413414 if (!dir )
414415 return NULL ;
415- entry = search_ref_dir (dir , refname );
416+ entry = search_ref_dir (dir , refname , strlen ( refname ) );
416417 return (entry && !(entry -> flag & REF_DIR )) ? entry : NULL ;
417418}
418419
0 commit comments