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>
This commit is contained in:
David Gibson 2023-02-27 23:11:29 +11:00
parent 9cceabea1e
commit 0b842c3c81
4 changed files with 10 additions and 7 deletions

View file

@ -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
{