initscripts fkt: ignore invalid keys in readhash

Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
This commit is contained in:
Jonatan Schlag
2024-06-16 18:02:40 +02:00
committed by Michael Tremer
parent d289bc28be
commit 02254f5543
5 changed files with 46 additions and 0 deletions

View File

@@ -913,6 +913,12 @@ readhash() {
local key="${line%=*}"
local val="${line#*=}"
# Skip lines with an invalid key
if ! [[ ${key} =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then
echo "Invalid key '${key}'" >&2
continue
fi
printf -v "${array}[${key}]" "%s" "${val}"
done < "${file}"
}

View File

@@ -0,0 +1,20 @@
CONFIG_TYPE=3
GREEN_DEV=green0
GREEN_MACADDR=00:c0:08:8a:a0:47
GREEN_DRIVER=r8175
-RED_DEV=red0
RE??D_MACADDR=00:c0:08:8a:a0:56
RED&&_DRIVER=r8283
# Another Comment
0BLUE_DEV='blue0 net0'
BLUE_MACADDR=bc:30:7d:58:6b:e3
BLUE_DRIVER=rt2800
RED_DHCP_HOSTNAME=ipfire
RED_DHCP_FORCE_MTU=
RED_ADDRESS=0.0.0.0
RED_NETMASK=0.0.0.0
RED_TYPE=PPPOE
RED_NETADDRESS=0.0.0.0
# Comment for testing
# Comment for testing Comments with spaces before

View File

@@ -0,0 +1,4 @@
Invalid key '-RED_DEV'
Invalid key 'RE??D_MACADDR'
Invalid key 'RED&&_DRIVER'
Invalid key '0BLUE_DEV'

View File

@@ -23,3 +23,19 @@ test_that_array_doesnt_have_key "CONFIG" "# Comment for testing Comments with sp
test_that_output_is "${SCRIPT_PATH}/data/1_output_stdout" "1" readhash "CONFIG" "${SCRIPT_PATH}/data/1"
test_that_output_is "${SCRIPT_PATH}/data/1_output_stderr" "2" readhash "CONFIG" "${SCRIPT_PATH}/data/1"
# Check with invalid Lines (values and keys)
readhash "CONFIG2" "${SCRIPT_PATH}/data/2" &> /dev/null
# test if we read the correct data
test_value_in_array "CONFIG2" "RED_DHCP_HOSTNAME" "ipfire"
test_value_in_array "CONFIG2" "BLUE_MACADDR" "bc:30:7d:58:6b:e3"
# We could do some complex checking if we would create functions to check for correct values and keys.
# We would be then able to mock these function and check if they are correctly called and if the data
# does not end up in our array.
# I think the more simpler way of checking the logged errors is the fastes way here.
test_that_output_is "${SCRIPT_PATH}/data/2_output_stdout" "1" readhash "CONFIG2" "${SCRIPT_PATH}/data/2"
test_that_output_is "${SCRIPT_PATH}/data/2_output_stderr" "2" readhash "CONFIG2" "${SCRIPT_PATH}/data/2"