mirror of
https://github.com/robbyrussell/oh-my-zsh.git
synced 2026-09-21 18:46:06 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6b789c8bd6 | ||
|
|
984d07a53b |
+11
-42
@@ -38,47 +38,16 @@
|
||||
# due to malicious input as a consequence of CVE-2021-45444, which affects
|
||||
# zsh versions from 5.0.3 to 5.8.
|
||||
#
|
||||
# The patch is applied when VCS_INFO_formats is first called, since loading
|
||||
# and patching it on every startup costs time in shells that never use
|
||||
# vcs_info. `autoload` doesn't replace an already defined function, so this
|
||||
# wrapper survives a later `autoload -Uz vcs_info` in a theme or .zshrc, and
|
||||
# vcs_info's own `autoload -Uz VCS_INFO_formats`.
|
||||
if (( $+functions[VCS_INFO_formats] )); then
|
||||
() {
|
||||
autoload -Uz +X regexp-replace 2>/dev/null || return 1
|
||||
autoload -Uz +X regexp-replace VCS_INFO_formats 2>/dev/null || return 0
|
||||
|
||||
# We use $tmp here because it's already a local variable in VCS_INFO_formats
|
||||
local PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
|
||||
# Unique string to avoid reapplying the patch if this code gets called twice
|
||||
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
|
||||
# Only patch the VCS_INFO_formats function if not already patched
|
||||
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
|
||||
regexp-replace 'functions[VCS_INFO_formats]' \
|
||||
"VCS_INFO_hook 'post-backend'" \
|
||||
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
|
||||
fi
|
||||
}
|
||||
else
|
||||
function VCS_INFO_formats {
|
||||
local loaded_function="$(
|
||||
unfunction VCS_INFO_formats 2>/dev/null
|
||||
autoload -Uz +X VCS_INFO_formats 2>/dev/null || return 1
|
||||
print -r -- "$functions[VCS_INFO_formats]"
|
||||
)" || return 1
|
||||
functions[VCS_INFO_formats]="$loaded_function"
|
||||
autoload -Uz +X regexp-replace 2>/dev/null || return 1
|
||||
|
||||
# We use $tmp here because it's already a local variable in VCS_INFO_formats
|
||||
local PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
|
||||
# Unique string to avoid reapplying the patch if this code gets called twice
|
||||
local PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
|
||||
# Only patch the VCS_INFO_formats function if not already patched
|
||||
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
|
||||
regexp-replace 'functions[VCS_INFO_formats]' \
|
||||
"VCS_INFO_hook 'post-backend'" \
|
||||
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
|
||||
fi
|
||||
|
||||
VCS_INFO_formats "$@"
|
||||
}
|
||||
# We use $tmp here because it's already a local variable in VCS_INFO_formats
|
||||
typeset PATCH='for tmp (base base-name branch misc revision subdir) hook_com[$tmp]="${hook_com[$tmp]//\%/%%}"'
|
||||
# Unique string to avoid reapplying the patch if this code gets called twice
|
||||
typeset PATCH_ID=vcs_info-patch-9b9840f2-91e5-4471-af84-9e9a0dc68c1b
|
||||
# Only patch the VCS_INFO_formats function if not already patched
|
||||
if [[ "$functions[VCS_INFO_formats]" != *$PATCH_ID* ]]; then
|
||||
regexp-replace 'functions[VCS_INFO_formats]' \
|
||||
"VCS_INFO_hook 'post-backend'" \
|
||||
': ${PATCH_ID}; ${PATCH}; ${MATCH}'
|
||||
fi
|
||||
unset PATCH PATCH_ID
|
||||
|
||||
@@ -1,6 +1,25 @@
|
||||
# Git version checking
|
||||
autoload -Uz is-at-least
|
||||
git_version="${${(As: :)$(git version 2>/dev/null)}[3]}"
|
||||
# Running `git version` forks on every startup, so cache the result for a day
|
||||
# in $ZSH_CACHE_DIR, keyed on the git command path, mtime, and exec path.
|
||||
() {
|
||||
local cache="$ZSH_CACHE_DIR/git-version" key exec_path
|
||||
local -a stat lines
|
||||
zmodload -F zsh/stat b:zstat
|
||||
zstat -A stat +mtime -- "$commands[git]" 2>/dev/null
|
||||
exec_path="$(git --exec-path 2>/dev/null)"
|
||||
key="$commands[git] $stat[1] $exec_path"
|
||||
|
||||
lines=("$cache"(Nm-1))
|
||||
(( $#lines )) && lines=("${(@f)$(<"$cache")}")
|
||||
if [[ "$lines[1]" = "$key" ]]; then
|
||||
git_version="$lines[2]"
|
||||
return
|
||||
fi
|
||||
|
||||
git_version="${${(As: :)$(git version 2>/dev/null)}[3]}"
|
||||
[[ ! -w "$ZSH_CACHE_DIR" ]] || print -rl -- "$key" "$git_version" >| "$cache"
|
||||
}
|
||||
|
||||
#
|
||||
# Functions Current
|
||||
|
||||
Reference in New Issue
Block a user