Fix get_node_by_path string equality check

When determining if to recurse into a node, get_node_by_path does not
check if the length of each node name is equal.  If searching for
/foo/baz, this can result in recursing into /foobar because
strneq("foo", "foobar", 3) is true.

This can result in a reference to /foo/baz to be incorrectly set to
/foobar/baz.  A test for this was added.

Signed-off-by: Tim Montague <tmontague@ghs.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
Tim Montague
2017-04-17 16:51:05 -07:00
committed by David Gibson
parent 548aea2c43
commit a10cb3c818
3 changed files with 26 additions and 2 deletions

View File

@@ -12,4 +12,17 @@
ref = &{/node1}; /* reference after target */
lref = &n1;
};
/* Check references to nested nodes with common prefix */
foobar {
n3: baz {
ref = &{/foo/baz};
lref = &n4;
};
};
foo {
n4: baz {
ref = &{/foobar/baz};
lref = &n3;
};
};
};