delete_branches(): use resolve_refdup()

The return value of resolve_ref_unsafe() is not guaranteed to stay around as long as we need it, so use resolve_refdup() instead. Signed-off-by: Michael Haggerty <mhagger@alum.mit.edu>

Michael Haggerty committed Apr 25, 2016 at 10:42 UTC 8bb0455367a17bd7428e02f835e3f55c8cd168da
1 file changed +11 -8
builtin/branch.c
+11 -8
@@ -212,7 +212,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
212 die(_("Couldn't look up commit object for HEAD"));
213 }
214 for (i = 0; i < argc; i++, strbuf_release(&bname)) {
215 - const char *target;
215 + char *target = NULL;
216 int flags = 0;
217
218 strbuf_branchname(&bname, argv[i]);
@@ -231,11 +231,11 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
231 }
232 }
233
234 - target = resolve_ref_unsafe(name,
235 - RESOLVE_REF_READING
236 - | RESOLVE_REF_NO_RECURSE
237 - | RESOLVE_REF_ALLOW_BAD_NAME,
238 - sha1, &flags);
234 + target = resolve_refdup(name,
235 + RESOLVE_REF_READING
236 + | RESOLVE_REF_NO_RECURSE
237 + | RESOLVE_REF_ALLOW_BAD_NAME,
238 + sha1, &flags);
239 if (!target) {
240 error(remote_branch
241 ? _("remote-tracking branch '%s' not found.")
@@ -248,7 +248,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
248 check_branch_commit(bname.buf, name, sha1, head_rev, kinds,
249 force)) {
250 ret = 1;
251 - continue;
251 + goto next;
252 }
253
254 if (delete_ref(name, is_null_sha1(sha1) ? NULL : sha1,
@@ -258,7 +258,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
258 : _("Error deleting branch '%s'"),
259 bname.buf);
260 ret = 1;
261 - continue;
261 + goto next;
262 }
263 if (!quiet) {
264 printf(remote_branch
@@ -270,6 +270,9 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
270 : find_unique_abbrev(sha1, DEFAULT_ABBREV));
271 }
272 delete_branch_config(bname.buf);
273 +
274 + next:
275 + free(target);
276 }
277
278 free(name);