summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorMaximilian Brune <maximilian.brune@9elements.com>2023-09-20 05:12:04 +0200
committerFelix Held <felix-coreboot@felixheld.de>2023-11-16 12:01:40 +0000
commit77eaec6587e421dd1197f36de9e7c4b3a1afafdc (patch)
treed7f5ce66eb3bc842eb211180df3b59e7712aa6b9 /src/lib
parentf7f661f375b9408b5e7a89295601b8b63830d3d5 (diff)
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 <maximilian.brune@9elements.com> Change-Id: I229c07b76468fe54f90fa9df12f103d7c7c2859d Reviewed-on: https://review.coreboot.org/c/coreboot/+/78025 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Julius Werner <jwerner@chromium.org>
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/device_tree.c10
1 files changed, 7 insertions, 3 deletions
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) {