2013-11-22 Sterling Augustine <saugustine@google.com>
authorSterling Augustine <saugustine@google.com>
Fri, 22 Nov 2013 21:55:32 +0000 (13:55 -0800)
committerSterling Augustine <saugustine@google.com>
Fri, 22 Nov 2013 21:58:55 +0000 (13:58 -0800)
     PR gdb/16196:
     * valprint.c (read_string): Set new variable fetchlen based on
     fetchlimit and size.  Use it in call to partial_memory_read.
     Update comment.

gdb/ChangeLog
gdb/valprint.c

index 0b8683dc5d8d4a7f6dc69d31c2909b09f2bb0851..cd2a13681cad988f96452982ed0efba2a2bcebff 100644 (file)
@@ -1,3 +1,10 @@
+2013-11-22  Sterling Augustine  <saugustine@google.com>
+
+       PR backtrace/16196:
+       * valprint.c (read_string): Set new variable fetchlen based on
+       fetchlimit and size.  Use it in call to partial_memory_read.
+       Update comment.
+
 2013-11-22  Tom Tromey  <tromey@redhat.com>
 
        PR backtrace/16155:
index ea877f355f040a02f5acc32538dc54b2a1429342..ecc3411b6e7dc6447fd8d12de391f098ac47e09a 100644 (file)
@@ -1757,11 +1757,13 @@ partial_memory_read (CORE_ADDR memaddr, gdb_byte *myaddr,
    free, and BYTES_READ will be set to the number of bytes read.  Returns 0 on
    success, or a target_xfer_error on failure.
 
-   If LEN > 0, reads exactly LEN characters (including eventual NULs in
-   the middle or end of the string).  If LEN is -1, stops at the first
-   null character (not necessarily the first null byte) up to a maximum
-   of FETCHLIMIT characters.  Set FETCHLIMIT to UINT_MAX to read as many
-   characters as possible from the string.
+   If LEN > 0, reads the lesser of LEN or FETCHLIMIT characters
+   (including eventual NULs in the middle or end of the string).
+
+   If LEN is -1, stops at the first null character (not necessarily
+   the first null byte) up to a maximum of FETCHLIMIT characters.  Set
+   FETCHLIMIT to UINT_MAX to read as many characters as possible from
+   the string.
 
    Unless an exception is thrown, BUFFER will always be allocated, even on
    failure.  In this case, some characters might have been read before the
@@ -1807,10 +1809,12 @@ read_string (CORE_ADDR addr, int len, int width, unsigned int fetchlimit,
 
   if (len > 0)
     {
-      *buffer = (gdb_byte *) xmalloc (len * width);
+      unsigned int fetchlen = min (len, fetchlimit);
+
+      *buffer = (gdb_byte *) xmalloc (fetchlen * width);
       bufptr = *buffer;
 
-      nfetch = partial_memory_read (addr, bufptr, len * width, &errcode)
+      nfetch = partial_memory_read (addr, bufptr, fetchlen * width, &errcode)
        / width;
       addr += nfetch * width;
       bufptr += nfetch * width;