Fix mistake in recent code to check for an unterminated leb128 number.
authorNick Clifton <nickc@redhat.com>
Fri, 13 Feb 2015 11:13:20 +0000 (11:13 +0000)
committerNick Clifton <nickc@redhat.com>
Fri, 13 Feb 2015 11:13:20 +0000 (11:13 +0000)
* dwarf.c (read_leb128): Fix test for shift becoming too large.

binutils/coffgrok.c
binutils/dwarf.c

index 5dc9558..2bbfdc4 100644 (file)
@@ -668,8 +668,13 @@ do_define (unsigned int i, struct coff_scope *b)
 
          if (!is->init)
            {
+             long high = s->where->offset + s->type->size; 
+
              is->low = s->where->offset;
-             is->high = s->where->offset + s->type->size;
+             is->high = high;
+             /* PR 17512: file: 37e7a80d.  */
+             if (is->high != high)
+               fatal (_("Out of range type size: %u"), s->type->size);
              is->init = 1;
              is->parent = s->where->section;
            }
index dad381f..936f634 100644 (file)
@@ -284,7 +284,7 @@ read_leb128 (unsigned char *data,
 
       /* PR 17512: file: 0ca183b8.
         FIXME: Should we signal this error somehow ?  */
-      if (shift >= sizeof (result))
+      if (shift >= sizeof (result) * 8)
        break;
     }