projects
/
binutils-gdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
x86: shrink op_riprel
[binutils-gdb.git]
/
binutils
/
sysdump.c
diff --git
a/binutils/sysdump.c
b/binutils/sysdump.c
index d433e71ed931ed4eb83fbd9a190d616ebd2af418..e9fa6382eadf0386c352eb46da585c561c20cb5f 100644
(file)
--- a/
binutils/sysdump.c
+++ b/
binutils/sysdump.c
@@
-1,5
+1,5
@@
/* Sysroff object format dumper.
/* Sysroff object format dumper.
- Copyright (C) 1994-202
0
Free Software Foundation, Inc.
+ Copyright (C) 1994-202
2
Free Software Foundation, Inc.
This file is part of GNU Binutils.
This file is part of GNU Binutils.
@@
-60,6
+60,12
@@
getCHARS (unsigned char *ptr, int *idx, int size, int max)
(*idx) += 8;
}
(*idx) += 8;
}
+ if (oc + b > size)
+ {
+ /* PR 28564 */
+ return _("*corrupt*");
+ }
+
*idx += b * 8;
r = xcalloc (b + 1, 1);
memcpy (r, ptr + oc, b);
*idx += b * 8;
r = xcalloc (b + 1, 1);
memcpy (r, ptr + oc, b);
@@
-131,19
+137,21
@@
fillup (unsigned char *ptr)
}
static barray
}
static barray
-getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED,
- int max ATTRIBUTE_UNUSED)
+getBARRAY (unsigned char *ptr, int *idx, int dsize ATTRIBUTE_UNUSED, int max)
{
barray res;
int i;
int byte = *idx / 8;
{
barray res;
int i;
int byte = *idx / 8;
- int size = ptr[byte++];
+ int size = 0;
+
+ if (byte < max)
+ size = ptr[byte++];
res.len = size;
res.data = (unsigned char *) xmalloc (size);
for (i = 0; i < size; i++)
res.len = size;
res.data = (unsigned char *) xmalloc (size);
for (i = 0; i < size; i++)
- res.data[i] =
ptr[byte++]
;
+ res.data[i] =
byte < max ? ptr[byte++] : 0
;
return res;
}
return res;
}
@@
-179,7
+187,8
@@
getINT (unsigned char *ptr, int *idx, int size, int max)
n = (ptr[byte + 0] << 8) + ptr[byte + 1];
break;
case 4:
n = (ptr[byte + 0] << 8) + ptr[byte + 1];
break;
case 4:
- n = (ptr[byte + 0] << 24) + (ptr[byte + 1] << 16) + (ptr[byte + 2] << 8) + (ptr[byte + 3]);
+ n = (((unsigned) ptr[byte + 0] << 24) + (ptr[byte + 1] << 16)
+ + (ptr[byte + 2] << 8) + (ptr[byte + 3]));
break;
default:
fatal (_("Unsupported read size: %d"), size);
break;
default:
fatal (_("Unsupported read size: %d"), size);
@@
-633,8
+642,6
@@
module (void)
}
}
}
}
-char *program_name;
-
ATTRIBUTE_NORETURN static void
show_usage (FILE *ffile, int status)
{
ATTRIBUTE_NORETURN static void
show_usage (FILE *ffile, int status)
{
@@
-661,12
+668,10
@@
main (int ac, char **av)
{NULL, no_argument, 0, 0}
};
{NULL, no_argument, 0, 0}
};
-#if
defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+#if
def HAVE_LC_MESSAGES
setlocale (LC_MESSAGES, "");
#endif
setlocale (LC_MESSAGES, "");
#endif
-#if defined (HAVE_SETLOCALE)
setlocale (LC_CTYPE, "");
setlocale (LC_CTYPE, "");
-#endif
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);
bindtextdomain (PACKAGE, LOCALEDIR);
textdomain (PACKAGE);