libctf: ctf_archive_next should set the parent name consistently

The top level of CTF containers is a "CTF archive", which contains a
collection of named members (each a CTF dictionary).  In the serialized
file format, this is optional and skipped if the archive would have only
one member, as when no ambiguous types are present: so it is commonplace
to have a simple ctf_dict_t written out, with no archive container
wrapped around it.

But, unlike ctf_archive_iter, ctf_archive_next didn't quite handle this
case right.  It should set the name of this fake "member" to
_CTF_SECTION, i.e. ".ctf", but it was failing to do so, so callers got
an unintialized variable back instead and were understandably confused.

So set the name properly.

libctf/ChangeLog
2021-03-02  Nick Alcock  <nick.alcock@oracle.com>

	* ctf-archive.c (ctf_archive_next): Set the name of parents in
	single-member archives.
This commit is contained in:
Nick Alcock 2021-02-18 16:56:23 +00:00
parent b80e421f91
commit eaa2913a7a
2 changed files with 7 additions and 0 deletions

View file

@ -1165,6 +1165,8 @@ ctf_archive_next (const ctf_archive_t *wrapper, ctf_next_t **it, const char **na
if (!skip_parent)
{
wrapper->ctfi_dict->ctf_refcnt++;
if (name)
*name = _CTF_SECTION;
return wrapper->ctfi_dict;
}
}