Fix: Patterns matching the empty string rejected
As observed in #86, fingers accepts a pattern accepting an empty string, such as `(token)?`, and this leads the `gawk` subprocess to loop indefinitely, allocated memory until it's eventually killed by the kernel. This pr rejects such patterns, printing an error message.
This commit is contained in:
parent
eba6ee2d55
commit
c2392d0ca3
|
@ -128,7 +128,8 @@ set -g @fingers-pattern-1 'yolo'
|
||||||
set -g @fingers-pattern-50 'whatever'
|
set -g @fingers-pattern-50 'whatever'
|
||||||
```
|
```
|
||||||
|
|
||||||
Patterns are case insensitive, and grep's extended syntax ( ERE ) should be used.
|
Patterns are case insensitive, and grep's extended syntax ( ERE ) should be used. Patterns
|
||||||
|
matching the empty string are disallowed.
|
||||||
`man grep` for more info.
|
`man grep` for more info.
|
||||||
|
|
||||||
If the introduced regexp contains an error, an error will be shown when
|
If the introduced regexp contains an error, an error will be shown when
|
||||||
|
|
|
@ -7,7 +7,6 @@ TMUX_PRINTER="$CONF_CURRENT_DIR/../vendor/tmux-printer/tmux-printer"
|
||||||
|
|
||||||
declare -A fingers_defaults
|
declare -A fingers_defaults
|
||||||
|
|
||||||
# TODO empty patterns are invalid
|
|
||||||
function check_pattern() {
|
function check_pattern() {
|
||||||
echo "beep beep" | grep -e "$1" 2> /dev/null
|
echo "beep beep" | grep -e "$1" 2> /dev/null
|
||||||
|
|
||||||
|
@ -18,6 +17,14 @@ function check_pattern() {
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function check_matches_empty_string() {
|
||||||
|
if ! grep -e "$1" <<< "" >/dev/null; then
|
||||||
|
echo 0
|
||||||
|
else
|
||||||
|
echo 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
function envify() {
|
function envify() {
|
||||||
echo $1 | tr '[:lower:]' '[:upper:]' | sed "s/-/_/g"
|
echo $1 | tr '[:lower:]' '[:upper:]' | sed "s/-/_/g"
|
||||||
}
|
}
|
||||||
|
@ -109,6 +116,14 @@ for pattern in "${PATTERNS_LIST[@]}" ; do
|
||||||
PATTERNS_LIST[$i]="nope{4000}"
|
PATTERNS_LIST[$i]="nope{4000}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
pattern_matches_empty=$(check_matches_empty_string "$pattern")
|
||||||
|
|
||||||
|
if [[ $pattern_matches_empty == 0 ]]; then
|
||||||
|
display_message "fingers-error: user defined pattern $pattern matched the empty string" 5000
|
||||||
|
PATTERNS_LIST[$i]="nope{4000}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
i=$((i + 1))
|
i=$((i + 1))
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue