mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-21 18:46:06 +02:00
fix(init): only accept an object ID as the resolved revision
A malformed HEAD or loose ref was copied into the zcompdump metadata as though it had resolved, so a corrupt file could make #omz revision: differ from git rev-parse HEAD instead of taking the fallback. Fold the three resolution paths into one exit and check the result is a 40 or 64 character hex object ID, so symbolic refs, malformed files and missed packed entries all fall through to git. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
c6d78edc8f
commit
97dfe1ae54
+17
-12
@@ -136,20 +136,25 @@ _omz_git_head() {
|
||||
[[ -r "$gitdir/HEAD" ]] || return 1
|
||||
read -r head 2>/dev/null < "$gitdir/HEAD" || return 1
|
||||
|
||||
# detached HEAD: the file holds the commit itself
|
||||
[[ "$head" = ref:\ * ]] || { REPLY="$head"; return 0 }
|
||||
|
||||
ref="${head#ref: }"
|
||||
if [[ -r "$common/$ref" ]]; then
|
||||
read -r REPLY 2>/dev/null < "$common/$ref" || return 1
|
||||
[[ "$REPLY" != ref:\ * ]] || return 1
|
||||
return 0
|
||||
if [[ "$head" = ref:\ * ]]; then
|
||||
ref="${head#ref: }"
|
||||
if [[ -r "$common/$ref" ]]; then
|
||||
read -r REPLY 2>/dev/null < "$common/$ref" || return 1
|
||||
elif [[ -r "$common/packed-refs" ]]; then
|
||||
lines=("${(@f)$(<"$common/packed-refs")}")
|
||||
REPLY="${lines[(r)* ${(b)ref}]%% *}"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
# detached HEAD: the file holds the commit itself
|
||||
REPLY="$head"
|
||||
fi
|
||||
|
||||
[[ -r "$common/packed-refs" ]] || return 1
|
||||
lines=("${(@f)$(<"$common/packed-refs")}")
|
||||
REPLY="${lines[(r)* ${(b)ref}]%% *}"
|
||||
[[ -n "$REPLY" ]]
|
||||
# only an object ID is a usable answer: a symbolic ref, a malformed file or
|
||||
# a missed packed entry all fall through to the git fallback instead
|
||||
[[ -n "$REPLY" && -z "${REPLY//[0-9a-f]/}" ]] \
|
||||
&& (( ${#REPLY} == 40 || ${#REPLY} == 64 ))
|
||||
}
|
||||
|
||||
# Construct zcompdump OMZ metadata. The helper reports through $REPLY, so
|
||||
|
||||
Reference in New Issue
Block a user