summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Herring <robh@kernel.org>2018-09-26 14:27:08 -0500
committerDavid Gibson <david@gibson.dropbear.id.au>2018-09-27 10:58:35 +1000
commit522d81d572f2f8ae683c39089df64f5c74205451 (patch)
treefbcb1e3cd4cb625e415730cfcb2495784db09d85
parente45198c9835901efc4763bcafa3cf50b5bdcb6b5 (diff)
downloaddevice-tree-compiler-522d81d572f2f8ae683c39089df64f5c74205451.tar.gz
Fix dts output with a REF_PATH marker
Commit 8c59a97ce096 ("Fix missing labels when emitting dts format") fixed label output, but broke output when there is a REF_PATH marker. The problem is a REF_PATH marker causes a zero length string to be emitted. The write_propval_string() function requires a length of at least 1 (including the terminating '\0'), but that was not being checked. For the integer output, a length of 0 is valid as it is possible to have labels inside the starting '<': int-prop = < start: 0x1234>; REF_PHANDLE is another marker that we don't explicitly handle, but it doesn't cause a problem as it is fundamentally just an int. Fixes: 8c59a97ce096 ("Fix missing labels when emitting dts format") Reported-by: Kumar Gala <kumar.gala@linaro.org> Cc: Grant Likely <grant.likely@arm.com> Signed-off-by: Rob Herring <robh@kernel.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--tests/path-references.dts2
-rwxr-xr-xtests/run_tests.sh6
-rw-r--r--treesource.c4
3 files changed, 11 insertions, 1 deletions
diff --git a/tests/path-references.dts b/tests/path-references.dts
index 8c66d80..1fb7d70 100644
--- a/tests/path-references.dts
+++ b/tests/path-references.dts
@@ -16,7 +16,7 @@
foobar {
n3: baz {
ref = &{/foo/baz};
- lref = &n4;
+ lref = start: &n4 end:;
};
};
foo {
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index e3e64e8..e7ee42b 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -572,6 +572,12 @@ dtc_tests () {
run_dtc_test -I dts -O dts $tree.test.dts
run_wrap_test cmp $tree $tree.test.dts
done
+ for tree in path-references; do
+ run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree.dts
+ run_dtc_test -I dts -O dts -o $tree.test.dts $tree.dts
+ run_dtc_test -I dts -O dtb -o $tree.test.dts.test.dtb $tree.test.dts
+ run_test dtbs_equal_ordered $tree.test.dtb $tree.test.dts.test.dtb
+ done
# Check -Oyaml output
if pkg-config --exists yaml-0.1; then
diff --git a/treesource.c b/treesource.c
index c1fdb86..93fd8ac 100644
--- a/treesource.c
+++ b/treesource.c
@@ -64,6 +64,10 @@ static bool isstring(char c)
static void write_propval_string(FILE *f, const char *s, size_t len)
{
const char *end = s + len - 1;
+
+ if (!len)
+ return;
+
assert(*end == '\0');
fprintf(f, "\"");