[17/21] initscripts fkt: ignore invalid keys in readhash
Commit Message
Signed-off-by: Jonatan Schlag <jonatan.schlag@ipfire.org>
---
src/initscripts/system/functions | 6 ++++++
tests/src/initscripts/system/functions/data/2 | 20 +++++++++++++++++++
.../system/functions/data/2_output_stderr | 4 ++++
.../system/functions/data/2_output_stdout | 0
.../src/initscripts/system/functions/test.sh | 11 ++++++++++
5 files changed, 41 insertions(+)
create mode 100644 tests/src/initscripts/system/functions/data/2
create mode 100644 tests/src/initscripts/system/functions/data/2_output_stderr
create mode 100644 tests/src/initscripts/system/functions/data/2_output_stdout
@@ -914,6 +914,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}"
}
new file mode 100644
@@ -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
new file mode 100644
@@ -0,0 +1,4 @@
+Invalid key '-RED_DEV'
+Invalid key 'RE??D_MACADDR'
+Invalid key 'RED&&_DRIVER'
+Invalid key '0BLUE_DEV'
new file mode 100644
@@ -23,3 +23,14 @@ 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_that_key_in_arry_has_value "CONFIG2" "RED_DHCP_HOSTNAME" "ipfire"
+test_that_key_in_arry_has_value "CONFIG2" "BLUE_MACADDR" "bc:30:7d:58:6b:e3"
+
+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"