@@ -1216,22 +1216,29 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
12161216 {
12171217 /* Make sure we're replacing something of the same type */
12181218 tree_stack_entry * last = git_array_last (stack );
1219- const char * basename = git_path_basename (update -> path );
1219+ char * basename = git_path_basename (update -> path );
12201220 const git_tree_entry * e = git_treebuilder_get (last -> bld , basename );
12211221 if (e && git_tree_entry_type (e ) != git_object__type_from_filemode (update -> filemode )) {
1222+ git__free (basename );
12221223 giterr_set (GITERR_TREE , "Cannot replace '%s' with '%s' at '%s'" ,
12231224 git_object_type2string (git_tree_entry_type (e )),
12241225 git_object_type2string (git_object__type_from_filemode (update -> filemode )),
12251226 update -> path );
1226- return -1 ;
1227+ error = -1 ;
1228+ goto cleanup ;
12271229 }
12281230
12291231 error = git_treebuilder_insert (NULL , last -> bld , basename , & update -> id , update -> filemode );
1232+ git__free (basename );
12301233 break ;
12311234 }
12321235 case GIT_TREE_UPDATE_REMOVE :
1233- error = git_treebuilder_remove (git_array_last (stack )-> bld , git_path_basename (update -> path ));
1236+ {
1237+ char * basename = git_path_basename (update -> path );
1238+ error = git_treebuilder_remove (git_array_last (stack )-> bld , basename );
1239+ git__free (basename );
12341240 break ;
1241+ }
12351242 default :
12361243 giterr_set (GITERR_TREE , "unkown action for update" );
12371244 error = -1 ;
@@ -1275,6 +1282,7 @@ int git_tree_create_updated(git_oid *out, git_repository *repo, git_tree *baseli
12751282 }
12761283 }
12771284
1285+ git_buf_free (& component );
12781286 git_array_clear (stack );
12791287 git_vector_free (& entries );
12801288 return error ;
0 commit comments