@@ -104,6 +104,7 @@ static int branch_merged(int kind, const char *name,
104104 */
105105 struct commit * reference_rev = NULL ;
106106 const char * reference_name = NULL ;
107+ void * reference_name_to_free = NULL ;
107108 int merged ;
108109
109110 if (kind == REF_LOCAL_BRANCH ) {
@@ -114,11 +115,9 @@ static int branch_merged(int kind, const char *name,
114115 branch -> merge &&
115116 branch -> merge [0 ] &&
116117 branch -> merge [0 ]-> dst &&
117- (reference_name =
118- resolve_ref (branch -> merge [0 ]-> dst , sha1 , 1 , NULL )) != NULL ) {
119- reference_name = xstrdup (reference_name );
118+ (reference_name = reference_name_to_free =
119+ resolve_refdup (branch -> merge [0 ]-> dst , sha1 , 1 , NULL )) != NULL )
120120 reference_rev = lookup_commit_reference (sha1 );
121- }
122121 }
123122 if (!reference_rev )
124123 reference_rev = head_rev ;
@@ -143,7 +142,7 @@ static int branch_merged(int kind, const char *name,
143142 " '%s', even though it is merged to HEAD." ),
144143 name , reference_name );
145144 }
146- free (( char * ) reference_name );
145+ free (reference_name_to_free );
147146 return merged ;
148147}
149148
@@ -253,7 +252,7 @@ static char *resolve_symref(const char *src, const char *prefix)
253252 int flag ;
254253 const char * dst , * cp ;
255254
256- dst = resolve_ref (src , sha1 , 0 , & flag );
255+ dst = resolve_ref_unsafe (src , sha1 , 0 , & flag );
257256 if (!(dst && (flag & REF_ISSYMREF )))
258257 return NULL ;
259258 if (prefix && (cp = skip_prefix (dst , prefix )))
@@ -738,10 +737,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
738737
739738 track = git_branch_track ;
740739
741- head = resolve_ref ("HEAD" , head_sha1 , 0 , NULL );
740+ head = resolve_refdup ("HEAD" , head_sha1 , 0 , NULL );
742741 if (!head )
743742 die (_ ("Failed to resolve HEAD as a valid ref." ));
744- head = xstrdup (head );
745743 if (!strcmp (head , "HEAD" )) {
746744 detached = 1 ;
747745 } else {
0 commit comments