aboutsummaryrefslogtreecommitdiff
path: root/dtc-parser.y
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2023-02-27 23:11:29 +1100
committerDavid Gibson <david@gibson.dropbear.id.au>2023-03-01 17:47:27 +1100
commit0b842c3c819971cdbe0915469759c40f6eb3db7e (patch)
tree98fcb46e669e220cce63b42db3f21a6ac170bfd6 /dtc-parser.y
parent9cceabea1ee09ae0864d365b7b3cc89a01b1287c (diff)
downloaddtc-0b842c3c819971cdbe0915469759c40f6eb3db7e.zip
dtc-0b842c3c819971cdbe0915469759c40f6eb3db7e.tar.gz
dtc-0b842c3c819971cdbe0915469759c40f6eb3db7e.tar.bz2
Make build_property() xstrdup its name argument
The name field of 'struct property' was really always supposed to be a malloc()ed string, that is owned by the structure. To avoid an extra strdup() for strings coming up from the lexer, build_property() and build_property_delete() expect to take such an already malloc()ed string, which means it's not correct to pass it a static string literal. That's a pretty non-obvious constraint, so a bunch of incorrect uses have crept in. Really, avoiding the extra dup from the lexer isn't a big enough benefit for this demonstrably dangerous interface. So change it to do the xstrdup() itself, removing the burden from callers. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'dtc-parser.y')
-rw-r--r--dtc-parser.y3
1 files changed, 3 insertions, 0 deletions
diff --git a/dtc-parser.y b/dtc-parser.y
index bff1337..9b724e5 100644
--- a/dtc-parser.y
+++ b/dtc-parser.y
@@ -284,14 +284,17 @@ propdef:
DT_PROPNODENAME '=' propdata ';'
{
$$ = build_property($1, $3, &@$);
+ free($1);
}
| DT_PROPNODENAME ';'
{
$$ = build_property($1, empty_data, &@$);
+ free($1);
}
| DT_DEL_PROP DT_PROPNODENAME ';'
{
$$ = build_property_delete($2);
+ free($2);
}
| DT_LABEL propdef
{