Ensure zero termination of tic4x insn buffer
authorChen Gang <gang.chen.5i5j@gmail.com>
Tue, 9 Dec 2014 06:32:54 +0000 (17:02 +1030)
committerAlan Modra <amodra@gmail.com>
Tue, 9 Dec 2014 06:34:45 +0000 (17:04 +1030)
* config/tc-tic4x.c (md_assemble): Ensure insn->name is zero
terminated.  Simplify concatenation of parallel insn.

gas/ChangeLog
gas/config/tc-tic4x.c

index 2fed9613fc2e9a8f5f8af5e2d25a0ceb087c939e..4ad61083178e4a701999c511319e56aced367200 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-09  Chen Gang  <gang.chen.5i5j@gmail.com>
+
+       * config/tc-tic4x.c (md_assemble): Ensure insn->name is zero
+       terminated.  Simplify concatenation of parallel insn.
+
 2014-12-06  Eric Botcazou  <ebotcazou@adacore.com>
 
        * configure.tgt: Add Visium support.
index 12d8ec957ab5dd87bffcbf548216cfd3d7d27501..b57272ce5e51d3fba5336c91f2034007786f89be 100644 (file)
@@ -2417,6 +2417,7 @@ md_assemble (char *str)
   char *s;
   int i;
   int parsed = 0;
+  size_t len;
   tic4x_inst_t *inst;          /* Instruction template.  */
   tic4x_inst_t *first_inst;
 
@@ -2455,8 +2456,8 @@ md_assemble (char *str)
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
-      strcat (insn->name, "_");
-      strncat (insn->name, str, TIC4X_NAME_MAX - 1 - strlen (insn->name));
+      len = strlen (insn->name);
+      snprintf (insn->name + len, TIC4X_NAME_MAX - len, "_%s", str);
 
       insn->operands[insn->num_operands++].mode = M_PARALLEL;
 
@@ -2518,7 +2519,8 @@ md_assemble (char *str)
        s++;
       if (*s)                  /* Null terminate for hash_find.  */
        *s++ = '\0';            /* and skip past null.  */
-      strncpy (insn->name, str, TIC4X_NAME_MAX - 3);
+      strncpy (insn->name, str, TIC4X_NAME_MAX - 1);
+      insn->name[TIC4X_NAME_MAX - 1] = '\0';
 
       if ((i = tic4x_operands_parse (s, insn->operands, 0)) < 0)
        {