summaryrefslogtreecommitdiffstats
path: root/binutils-2.25/binutils/rdcoff.c
diff options
context:
space:
mode:
Diffstat (limited to 'binutils-2.25/binutils/rdcoff.c')
-rw-r--r--binutils-2.25/binutils/rdcoff.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/binutils-2.25/binutils/rdcoff.c b/binutils-2.25/binutils/rdcoff.c
index 473305e2..67851366 100644
--- a/binutils-2.25/binutils/rdcoff.c
+++ b/binutils-2.25/binutils/rdcoff.c
@@ -1,6 +1,5 @@
/* stabs.c -- Parse COFF debugging information
- Copyright 1996, 1999, 2000, 2002, 2003, 2005, 2007
- Free Software Foundation, Inc.
+ Copyright (C) 1996-2014 Free Software Foundation, Inc.
Written by Ian Lance Taylor <ian@cygnus.com>.
This file is part of GNU Binutils.
@@ -84,7 +83,7 @@ struct coff_types
debug_type basic[T_MAX + 1];
};
-static debug_type *coff_get_slot (struct coff_types *, int);
+static debug_type *coff_get_slot (struct coff_types *, long);
static debug_type parse_coff_type
(bfd *, struct coff_symbols *, struct coff_types *, long, int,
union internal_auxent *, bfd_boolean, void *);
@@ -105,12 +104,17 @@ static bfd_boolean external_coff_symbol_p (int sym_class);
/* Return the slot for a type. */
static debug_type *
-coff_get_slot (struct coff_types *types, int indx)
+coff_get_slot (struct coff_types *types, long indx)
{
struct coff_slots **pps;
pps = &types->slots;
+ /* PR 17512: file: 078-18333-0.001:0.1.
+ FIXME: The value of 1000 is a guess. Maybe a better heuristic is needed. */
+ if (indx / COFF_SLOTS > 1000)
+ fatal (_("Excessively large slot index: %lx"), indx);
+
while (indx >= COFF_SLOTS)
{
if (*pps == NULL)