]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
readelf: Don't print more augmentation characters than there are.
authorMark Wielaard <mjw@redhat.com>
Thu, 11 Dec 2014 16:21:22 +0000 (17:21 +0100)
committerMark Wielaard <mjw@redhat.com>
Mon, 15 Dec 2014 09:05:26 +0000 (10:05 +0100)
Signed-off-by: Mark Wielaard <mjw@redhat.com>
src/ChangeLog
src/readelf.c

index 76244c59a4345f0a9203e94cf49ee799a742c8a3..b24daffbb104eb417cfc7e359eb30d577a7588d8 100644 (file)
@@ -1,3 +1,8 @@
+2014-12-11  Mark Wielaard  <mjw@redhat.com>
+
+       * readelf.c (print_debug_frame_section): Check number of augmentation
+       chars to print.
+
 2014-12-09  Mark Wielaard  <mjw@redhat.com>
 
        * readelf.c (handle_file_note): Check count fits data section and
index c6d10f7bd8b01757a03986f44c1b182465c13b64..31a0e0a94c301fb3722ba858b3beae9695683494 100644 (file)
@@ -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')
                        {