@@ -319,19 +319,19 @@ static void sort_ref_dir(struct ref_dir *dir);
319
319
* (non-recursively), sorting dir if necessary. Return NULL if no
320
320
* such entry is found. dir must already be complete.
321
321
*/
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 )
323
324
{
324
325
struct ref_entry * e , * * r ;
325
- int len ;
326
326
327
327
if (refname == NULL || !dir -> nr )
328
328
return NULL ;
329
329
330
330
sort_ref_dir (dir );
331
331
332
- len = strlen (refname ) + 1 ;
333
- e = xmalloc (sizeof (struct ref_entry ) + len );
332
+ e = xmalloc (sizeof (struct ref_entry ) + len + 1 );
334
333
memcpy (e -> name , refname , len );
334
+ e -> name [len ] = '\0' ;
335
335
336
336
r = bsearch (& e , dir -> entries , dir -> nr , sizeof (* dir -> entries ), ref_entry_cmp );
337
337
@@ -353,7 +353,8 @@ static struct ref_entry *search_ref_dir(struct ref_dir *dir, const char *refname
353
353
static struct ref_dir * search_for_subdir (struct ref_dir * dir ,
354
354
const char * subdirname , int mkdir )
355
355
{
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 );
357
358
if (!entry ) {
358
359
if (!mkdir )
359
360
return NULL ;
@@ -412,7 +413,7 @@ static struct ref_entry *find_ref(struct ref_dir *dir, const char *refname)
412
413
dir = find_containing_dir (dir , refname , 0 );
413
414
if (!dir )
414
415
return NULL ;
415
- entry = search_ref_dir (dir , refname );
416
+ entry = search_ref_dir (dir , refname , strlen ( refname ) );
416
417
return (entry && !(entry -> flag & REF_DIR )) ? entry : NULL ;
417
418
}
418
419
0 commit comments