]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
RHBZ#805447: Fix core file grokking for case of truncated .dynstr
authorRoland McGrath <roland@hack.frob.com>
Wed, 28 Mar 2012 17:22:35 +0000 (10:22 -0700)
committerRoland McGrath <roland@hack.frob.com>
Wed, 28 Mar 2012 17:22:35 +0000 (10:22 -0700)
libdwfl/ChangeLog
libdwfl/dwfl_segment_report_module.c

index 87a055506da82c9d66a4f01d473585306070fde4..86f6fba47b78376a11633d4d4c49e78ff6e19f94 100644 (file)
@@ -1,3 +1,10 @@
+2012-03-28  Roland McGrath  <roland@hack.frob.com>
+
+       * dwfl_segment_report_module.c
+       (dwfl_segment_report_module: read_portion): Don't use existing buffer
+       when FILESZ is zero (string mode) and available portion doesn't hold
+       a terminated string.
+
 2011-12-02  Roland McGrath  <roland@hack.frob.com>
 
        * elf-from-memory.c (elf_from_remote_memory): Fix ELFCLASS64 case
index 012a0fdeb61be330dc262d0f9849f18336900cb4..553418042ae0c2ac9d7e3ccf9209ee3bc6879d58 100644 (file)
@@ -1,5 +1,5 @@
 /* Sniff out modules from ELF headers visible in memory segments.
-   Copyright (C) 2008-2010 Red Hat, Inc.
+   Copyright (C) 2008-2012 Red Hat, Inc.
    This file is part of Red Hat elfutils.
 
    Red Hat elfutils is free software; you can redistribute it and/or modify
@@ -155,7 +155,11 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const char *name,
   inline bool read_portion (void **data, size_t *data_size,
                            GElf_Addr vaddr, size_t filesz)
   {
-    if (vaddr - start + filesz > buffer_available)
+    if (vaddr - start + filesz > buffer_available
+       /* If we're in string mode, then don't consider the buffer we have
+          sufficient unless it contains the terminator of the string.  */
+       || (filesz == 0 && memchr (vaddr - start + buffer, '\0',
+                                  buffer_available - (vaddr - start)) == NULL))
       {
        *data = NULL;
        *data_size = filesz;