From 77eaec6587e421dd1197f36de9e7c4b3a1afafdc Mon Sep 17 00:00:00 2001 From: Maximilian Brune Date: Wed, 20 Sep 2023 05:12:04 +0200 Subject: lib/device_tree.c: Fix print_property This uses the size attribute to traverse the possible string. This patch traverses the entire property for non printable characters and not just until the first 0 is hit. Now numbers that start with a zero (memory wise) are not falsely recognized as strings: before the patch: clock-frequency = ""; after the patch: clock-frequency = < 0x1c2000 >; Signed-off-by: Maximilian Brune Change-Id: I229c07b76468fe54f90fa9df12f103d7c7c2859d Reviewed-on: https://review.coreboot.org/c/coreboot/+/78025 Tested-by: build bot (Jenkins) Reviewed-by: Julius Werner --- src/lib/device_tree.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'src/lib') diff --git a/src/lib/device_tree.c b/src/lib/device_tree.c index 352f2545db..ab9c937b38 100644 --- a/src/lib/device_tree.c +++ b/src/lib/device_tree.c @@ -75,10 +75,14 @@ static void print_property(const struct fdt_property *prop, int depth) int is_string = prop->size > 0 && ((char *)prop->data)[prop->size - 1] == '\0'; - if (is_string) - for (const char *c = prop->data; *c != '\0'; c++) - if (!isprint(*c)) + if (is_string) { + for (int i = 0; i < prop->size - 1; i++) { + if (!isprint(((char *)prop->data)[i])) { is_string = 0; + break; + } + } + } print_indent(depth); if (is_string) { -- cgit v1.2.3