diff options
| author | Mark Wielaard <[email protected]> | 2014-12-11 17:21:22 +0100 |
|---|---|---|
| committer | Mark Wielaard <[email protected]> | 2014-12-15 10:05:26 +0100 |
| commit | cd33929347b975cbeb286e2e68cf7775703ab7b2 (patch) | |
| tree | 97caf5c520b17992cc21dee9f8d2ed5f130b58db /src/readelf.c | |
| parent | 65a556fc865657ada6355686dedd282d6f1ad863 (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.c | 7 |
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') { |
