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);