[12/59] libctf, types: ints, floats and typedefs with no name are invalid

Message ID 20200630233146.338613-13-nick.alcock@oracle.com
State New
Headers show
Series
  • Deduplicating CTF linker
Related show

Commit Message

H.J. Lu via Binutils June 30, 2020, 11:30 p.m.
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/ctf-types.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

-- 
2.27.0.247.g3dff7de930

Patch

diff --git a/libctf/ctf-types.c b/libctf/ctf-types.c
index f5a1fc0ae12..db42b9e8a90 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: