@@ -294,12 +294,13 @@ static void clear_ref_dir(struct ref_dir *dir)
294294 * "refs/heads/") or "" for the top-level directory.
295295 */
296296static struct ref_entry * create_dir_entry (struct ref_cache * ref_cache ,
297- const char * dirname , int incomplete )
297+ const char * dirname , size_t len ,
298+ int incomplete )
298299{
299300 struct ref_entry * direntry ;
300- int len = strlen (dirname );
301301 direntry = xcalloc (1 , sizeof (struct ref_entry ) + len + 1 );
302- memcpy (direntry -> name , dirname , len + 1 );
302+ memcpy (direntry -> name , dirname , len );
303+ direntry -> name [len ] = '\0' ;
303304 direntry -> u .subdir .ref_cache = ref_cache ;
304305 direntry -> flag = REF_DIR | (incomplete ? REF_INCOMPLETE : 0 );
305306 return direntry ;
@@ -364,7 +365,7 @@ static struct ref_dir *search_for_subdir(struct ref_dir *dir,
364365 * therefore, create an empty record for it but mark
365366 * the record complete.
366367 */
367- entry = create_dir_entry (dir -> ref_cache , subdirname , 0 );
368+ entry = create_dir_entry (dir -> ref_cache , subdirname , len , 0 );
368369 add_entry_to_dir (dir , entry );
369370 }
370371 return get_ref_dir (entry );
@@ -823,7 +824,7 @@ static struct ref_dir *get_packed_refs(struct ref_cache *refs)
823824 const char * packed_refs_file ;
824825 FILE * f ;
825826
826- refs -> packed = create_dir_entry (refs , "" , 0 );
827+ refs -> packed = create_dir_entry (refs , "" , 0 , 0 );
827828 if (* refs -> name )
828829 packed_refs_file = git_path_submodule (refs -> name , "packed-refs" );
829830 else
@@ -888,7 +889,8 @@ static void read_loose_refs(const char *dirname, struct ref_dir *dir)
888889 } else if (S_ISDIR (st .st_mode )) {
889890 strbuf_addch (& refname , '/' );
890891 add_entry_to_dir (dir ,
891- create_dir_entry (refs , refname .buf , 1 ));
892+ create_dir_entry (refs , refname .buf ,
893+ refname .len , 1 ));
892894 } else {
893895 if (* refs -> name ) {
894896 hashclr (sha1 );
@@ -918,12 +920,12 @@ static struct ref_dir *get_loose_refs(struct ref_cache *refs)
918920 * are about to read the only subdirectory that can
919921 * hold references:
920922 */
921- refs -> loose = create_dir_entry (refs , "" , 0 );
923+ refs -> loose = create_dir_entry (refs , "" , 0 , 0 );
922924 /*
923925 * Create an incomplete entry for "refs/":
924926 */
925927 add_entry_to_dir (get_ref_dir (refs -> loose ),
926- create_dir_entry (refs , "refs/" , 1 ));
928+ create_dir_entry (refs , "refs/" , 5 , 1 ));
927929 }
928930 return get_ref_dir (refs -> loose );
929931}
0 commit comments