Jeff Johnson <j...@dosec.com.au> writes:

> I believe I have found a bug in the msp-gcc compiler. The simple
> program attached should illustrate the problem.

The error is in the assembler, not the compiler. It is a buffer that
is too small and overflows because of a common strncpy error[*].

I'm not too familiar with this code but the patch below (relative to
binutils 2.14) fixes the problem for me.


Regards,
Daniel

[*] This is exactly why strlcpy was invented:
      http://www.courtesan.com/todd/papers/strlcpy.html

--- gas/config/tc-msp430.c.orig Tue Sep 16 10:36:14 2003
+++ gas/config/tc-msp430.c      Tue Sep 16 10:28:58 2003
@@ -541,15 +541,14 @@ msp430_operands (opcode, line)
            }
          break;
 
        case 2:
          {
-           char l2[16];
-
            /* Shift instruction.  */
            line = extract_operand (line, l1, sizeof (l1));
-           strncpy (l2, l1, 16);
+           strncpy (l2, l1, sizeof l2 - 1);
+           l2[sizeof l2 - 1] = '\0';
            res = msp430_srcoperand (&op1, l1, opcode->bin_opcode, &imm_op);
            res += msp430_dstoperand (&op2, l2, opcode->bin_opcode);
 
            if (res)
              break;    /* An error occured.  All warnings were done before.  */

Reply via email to