Browse Source

Fix an off-by-2 error in the source output code

This has been there for ages, but the assertion makes no sense in the
context of the test immediately preceding it.  This caused an abort()
when in -I dts -O dts mode with the right sort of internal labels in a
string property value.

Add a testcase for this and another candidate edge case (though this one
we already get right).

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
main
David Gibson 10 years ago
parent
commit
fa928fba7e
  1. 4
      tests/run_tests.sh
  2. 14
      tests/sourceoutput.dts
  3. 2
      treesource.c

4
tests/run_tests.sh

@ -271,6 +271,10 @@ libfdt_tests () { @@ -271,6 +271,10 @@ libfdt_tests () {

# Specific bug tests
run_test add_subnode_with_nops
run_dtc_test -I dts -O dts -o sourceoutput.test.dts sourceoutput.dts
run_dtc_test -I dts -O dtb -o sourceoutput.test.dtb sourceoutput.dts
run_dtc_test -I dts -O dtb -o sourceoutput.test.dts.test.dtb sourceoutput.test.dts
run_test dtbs_equal_ordered sourceoutput.test.dtb sourceoutput.test.dts.test.dtb
}

dtc_tests () {

14
tests/sourceoutput.dts

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
/dts-v1/;

/ {
/* Some versions had an off-by-2 bug which caused an abort
* when outputing labels within strings like this in source
* format */
prop1: prop1 = start1: "foo", mid1: "bar" end1: ;

/* Make sure that we correctly handle source output of things
* which could almost be expressed as strings, except for the
* embedded labels */
prop2 = start2: [66 6f 6f], mid2: "bar" end2: ;
};

2
treesource.c

@ -109,7 +109,7 @@ static void write_propval_string(FILE *f, struct data val) @@ -109,7 +109,7 @@ static void write_propval_string(FILE *f, struct data val)
break;
case '\0':
fprintf(f, "\", ");
while (m && (m->offset < i)) {
while (m && (m->offset <= (i + 1))) {
if (m->type == LABEL) {
assert(m->offset == (i+1));
fprintf(f, "%s: ", m->ref);

Loading…
Cancel
Save