fix: DB helper should properly filter entries (#3359)

Previously it was assumed the sed operation was applying the sed expressions as a sequence, but it did not seem to filter entries being looked up correctly.

Instead any line that matched either sed expression pattern was output (_value without matching key, values split by the delimiter_), then grep would match any of that causing false-positives.

Resolved by piping the first sed expression into the next.
This commit is contained in:
Brennan Kinney 2023-05-23 11:02:30 +12:00 committed by GitHub
parent da8d3654b8
commit 1d2df8d499
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -132,11 +132,11 @@ function __db_list_already_contains_value
{ {
# Avoids accidentally matching a substring (case-insensitive acceptable): # Avoids accidentally matching a substring (case-insensitive acceptable):
# 1. Extract the current value of the entry (`\1`), # 1. Extract the current value of the entry (`\1`),
# 2. If a value list, split into separate lines (`\n`+`g`) at V_DELIMITER, # 2. Value list support: Split values into separate lines (`\n`+`g`) at V_DELIMITER,
# 3. Check each line for an exact match of the target VALUE # 3. Check each line for an exact match of the target VALUE
sed -e "s/^${KEY_LOOKUP}\(.*\)/\1/" \ sed -ne "s/^${KEY_LOOKUP}\+\(.*\)/\1/p" "${DATABASE}" \
-e "s/${V_DELIMITER}/\n/g" \ | sed -e "s/${V_DELIMITER}/\n/g" \
"${DATABASE}" | grep -qi "^${_VALUE_}$" | grep -qi "^${_VALUE_}$"
} }