PR26441, ASAN: get_b_cc tc-cr16.c:1521
authorAlan Modra <amodra@gmail.com>
Tue, 25 Aug 2020 06:04:10 +0000 (15:34 +0930)
committerAlan Modra <amodra@gmail.com>
Tue, 25 Aug 2020 13:37:10 +0000 (23:07 +0930)
PR 26441
* config/tc-cr16.c (get_b_cc): Return NULL early if op isn't
two or three chars, and don't bother copying.

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

index 96e955140bbee3495f3010d6ff587d8d16379e7d..f7f701c6386eb00fbb7d3c2f2a52807bbb2a3863 100644 (file)
@@ -1,3 +1,9 @@
+2020-08-25  Alan Modra  <amodra@gmail.com>
+
+       PR 26441
+       * config/tc-cr16.c (get_b_cc): Return NULL early if op isn't
+       two or three chars, and don't bother copying.
+
 2020-08-25  Alan Modra  <amodra@gmail.com>
 
        PR 26426
index e85e5fa82f8377f7750d8f533d030ef1dd1e9abd..32eda77a4a3782122dab661851cfe28a1425275d 100644 (file)
@@ -1513,15 +1513,12 @@ static char *
 get_b_cc (char * op)
 {
   unsigned int i;
-  char op1[5];
 
-  for (i = 1; i < strlen (op); i++)
-     op1[i-1] = op[i];
-
-  op1[i-1] = '\0';
+  if (op[1] == 0 || (op[2] != 0 && op[3] != 0))
+    return NULL;
 
   for (i = 0; i < cr16_num_cc ; i++)
-    if (streq (op1, cr16_b_cond_tab[i]))
+    if (streq (op + 1, cr16_b_cond_tab[i]))
       return (char *) cr16_b_cond_tab[i];
 
    return NULL;