Merge branch 'jk/misc-resolve-ref-unsafe-fixes' into maint
authorJunio C Hamano <gitster@pobox.com>
Wed, 15 Nov 2017 03:04:52 +0000 (12:04 +0900)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 Nov 2017 03:04:52 +0000 (12:04 +0900)
Some codepaths did not check for errors when asking what branch the
HEAD points at, which have been fixed.

* jk/misc-resolve-ref-unsafe-fixes:
worktree: handle broken symrefs in find_shared_symref()
log: handle broken HEAD in decoration check
remote: handle broken symrefs
test-ref-store: avoid passing NULL to printf

builtin/remote.c
log-tree.c
t/helper/test-ref-store.c
worktree.c
index 4f5cac96b0f5e0044ddf0fd1e2ea686f694d62ca..bc896236952079fc3ae06e23101991169dea64fc 100644 (file)
@@ -565,7 +565,7 @@ static int read_remote_branches(const char *refname,
                item = string_list_append(rename->remote_branches, xstrdup(refname));
                symref = resolve_ref_unsafe(refname, RESOLVE_REF_READING,
                                            NULL, &flag);
-               if (flag & REF_ISSYMREF)
+               if (symref && (flag & REF_ISSYMREF))
                        item->util = xstrdup(symref);
                else
                        item->util = NULL;
index cea056234d0a0b605c988a4e157852cd659f22ef..580b3a98a03df8b1920b3f729c783b79ed781164 100644 (file)
@@ -198,7 +198,7 @@ static const struct name_decoration *current_pointed_by_HEAD(const struct name_d
 
        /* Now resolve and find the matching current branch */
        branch_name = resolve_ref_unsafe("HEAD", 0, NULL, &rru_flags);
-       if (!(rru_flags & REF_ISSYMREF))
+       if (!branch_name || !(rru_flags & REF_ISSYMREF))
                return NULL;
 
        if (!starts_with(branch_name, "refs/"))
index 05d8c4d8af093ad42d855b17d243fe07b8893bfb..6ec2670044d205533594947547fce8255de5aa4c 100644 (file)
@@ -135,7 +135,7 @@ static int cmd_resolve_ref(struct ref_store *refs, const char **argv)
 
        ref = refs_resolve_ref_unsafe(refs, refname, resolve_flags,
                                      sha1, &flags);
-       printf("%s %s 0x%x\n", sha1_to_hex(sha1), ref, flags);
+       printf("%s %s 0x%x\n", sha1_to_hex(sha1), ref ? ref : "(null)", flags);
        return ref ? 0 : 1;
 }
 
index 70015629dc69e4bdf7f8ef1973596f3360898da3..f8c40f2f5f8ce5b18c976b5281f5618adbeee4a7 100644 (file)
@@ -327,7 +327,8 @@ const struct worktree *find_shared_symref(const char *symref,
                refs = get_worktree_ref_store(wt);
                symref_target = refs_resolve_ref_unsafe(refs, symref, 0,
                                                        NULL, &flags);
-               if ((flags & REF_ISSYMREF) && !strcmp(symref_target, target)) {
+               if ((flags & REF_ISSYMREF) &&
+                   symref_target && !strcmp(symref_target, target)) {
                        existing = wt;
                        break;
                }