diff options
author | Nick Alcock <nick.alcock@oracle.com> | 2020-06-02 20:49:14 +0100 |
---|---|---|
committer | Nick Alcock <nick.alcock@oracle.com> | 2020-07-22 17:57:32 +0100 |
commit | 96e3ec29664810995d6d7d3b6fd6ae2d19c532bd (patch) | |
tree | 6b13dd4277d8647d015f6e17b681145d9f9b2550 | |
parent | 502e838ed9657ee74cdb4f53798e1468004c9524 (diff) | |
download | gdb-96e3ec29664810995d6d7d3b6fd6ae2d19c532bd.zip gdb-96e3ec29664810995d6d7d3b6fd6ae2d19c532bd.tar.gz gdb-96e3ec29664810995d6d7d3b6fd6ae2d19c532bd.tar.bz2 |
libctf, types: ints, floats and typedefs with no name are invalid
Report them as such, rather than letting ctf_decl_sprintf wrongly
conclude that the printing of zero characters means we are out of
memory.
libctf/
* ctf-types.c (ctf_type_aname): Return ECTF_CORRUPT if
ints, floats or typedefs have no name. Fix comment typo.
-rw-r--r-- | libctf/ChangeLog | 5 | ||||
-rw-r--r-- | libctf/ctf-types.c | 11 |
2 files changed, 15 insertions, 1 deletions
diff --git a/libctf/ChangeLog b/libctf/ChangeLog index 78f8f7e..f0e2001 100644 --- a/libctf/ChangeLog +++ b/libctf/ChangeLog @@ -1,5 +1,10 @@ 2020-07-22 Nick Alcock <nick.alcock@oracle.com> + * ctf-types.c (ctf_type_aname): Return ECTF_CORRUPT if + ints, floats or typedefs have no name. Fix comment typo. + +2020-07-22 Nick Alcock <nick.alcock@oracle.com> + * ctf-create.c (ctf_add_slice): Support slices of any kind that resolves to an integral type. * ctf-types.c (ctf_type_encoding): Resolve the type before diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c index f5a1fc0..db42b9e 100644 --- a/libctf/ctf-types.c +++ b/libctf/ctf-types.c @@ -316,7 +316,7 @@ ctf_id_t ctf_lookup_by_rawhash (ctf_file_t *fp, ctf_names_t *np, const char *nam return id; } -/* Lookup the given type ID and return its name as a new dynamcally-allocated +/* Lookup the given type ID and return its name as a new dynamically-allocated string. */ char * @@ -379,6 +379,15 @@ ctf_type_aname (ctf_file_t *fp, ctf_id_t type) case CTF_K_INTEGER: case CTF_K_FLOAT: case CTF_K_TYPEDEF: + /* Integers, floats, and typedefs must always be named types. */ + + if (name[0] == '\0') + { + ctf_set_errno (fp, ECTF_CORRUPT); + ctf_decl_fini (&cd); + return NULL; + } + ctf_decl_sprintf (&cd, "%s", name); break; case CTF_K_POINTER: |