libctf, types: ints, floats and typedefs with no name are invalid
authorNick Alcock <nick.alcock@oracle.com>
Tue, 2 Jun 2020 19:49:14 +0000 (20:49 +0100)
committerNick Alcock <nick.alcock@oracle.com>
Wed, 22 Jul 2020 16:57:32 +0000 (17:57 +0100)
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.

libctf/ChangeLog
libctf/ctf-types.c

index 78f8f7e3a6c32a789af3371b03f3cdb20eaed6ce..f0e20011f39faad421d5991ef80a1bd1d4bb2197 100644 (file)
@@ -1,3 +1,8 @@
+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
index f5a1fc0ae1218fcec740b74c96132ba9464ba66f..db42b9e8a90d62feb745e461b2197a47e45db62b 100644 (file)
@@ -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: