[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"