summaryrefslogtreecommitdiffstats
path: root/src/readelf.c
diff options
context:
space:
mode:
authorMark Wielaard <[email protected]>2014-12-11 17:21:22 +0100
committerMark Wielaard <[email protected]>2014-12-15 10:05:26 +0100
commitcd33929347b975cbeb286e2e68cf7775703ab7b2 (patch)
tree97caf5c520b17992cc21dee9f8d2ed5f130b58db /src/readelf.c
parent65a556fc865657ada6355686dedd282d6f1ad863 (diff)
readelf: Don't print more augmentation characters than there are.
Signed-off-by: Mark Wielaard <[email protected]>
Diffstat (limited to 'src/readelf.c')
-rw-r--r--src/readelf.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/readelf.c b/src/readelf.c
index c6d10f7b..31a0e0a9 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -5490,7 +5490,7 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
unsigned int augmentationlen;
get_uleb128 (augmentationlen, readp);
- if (augmentationlen > (size_t) (dataend - readp))
+ if (augmentationlen > (size_t) (cieend - readp))
{
error (0, 0, gettext ("invalid augmentation length"));
readp = cieend;
@@ -5499,7 +5499,7 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
const char *hdr = "Augmentation data:";
const char *cp = augmentation + 1;
- while (*cp != '\0')
+ while (*cp != '\0' && cp < augmentation + augmentationlen + 1)
{
printf (" %-26s%#x ", hdr, *readp);
hdr = "";
@@ -5655,7 +5655,8 @@ print_debug_frame_section (Dwfl_Module *dwflmod, Ebl *ebl, GElf_Ehdr *ehdr,
const char *hdr = "Augmentation data:";
const char *cp = cie->augmentation + 1;
unsigned int u = 0;
- while (*cp != '\0')
+ while (*cp != '\0'
+ && cp < cie->augmentation + augmentationlen + 1)
{
if (*cp == 'L')
{