Skip to content

Commit f4a42f1

Browse files
committed
tighter refname parsing
1 parent 2e2c3ab commit f4a42f1

File tree

2 files changed

+10
-2
lines changed

2 files changed

+10
-2
lines changed

builtin/update-ref.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ static char *parse_refname(const char **next)
7474
return NULL;
7575
}
7676

77-
if (check_refname_format(ref.buf, REFNAME_ALLOW_ONELEVEL))
77+
if (check_refname_format(ref.buf, REFNAME_FULLY_QUALIFIED))
7878
die("invalid ref format: %s", ref.buf);
7979

8080
return strbuf_detach(&ref, NULL);
@@ -309,7 +309,7 @@ static void parse_cmd_symref_update(struct ref_transaction *transaction,
309309

310310
have_old_oid = 1;
311311
} else if (!strcmp(old_arg, "ref")) {
312-
if (check_refname_format(old_target, REFNAME_ALLOW_ONELEVEL))
312+
if (check_refname_format(old_target, REFNAME_FULLY_QUALIFIED))
313313
die("symref-update %s: invalid ref: %s", refname, old_target);
314314
} else {
315315
die("symref-update %s: invalid arg '%s' for old value", refname, old_arg);

t/t1400-update-ref.sh

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2442,4 +2442,12 @@ test_expect_success 'dangling symref overwritten without old oid' '
24422442
test_must_fail git rev-parse --verify refs/heads/does-not-exist
24432443
'
24442444

2445+
test_expect_success 'update-ref validates refs as fully qualified' '
2446+
git symbolic-ref refs/heads/valid refs/heads/one &&
2447+
test_must_fail git update-ref --no-deref --stdin <<-\EOF 2>err &&
2448+
symref-update refs/heads/valid refs/heads/two ref invalid-at-root
2449+
EOF
2450+
test_grep "invalid ref: invalid-at-root" err
2451+
'
2452+
24452453
test_done

0 commit comments

Comments
 (0)