diff options
author | Michael Stahl <mstahl@redhat.com> | 2017-09-29 16:53:35 +0200 |
---|---|---|
committer | Michael Stahl <mstahl@redhat.com> | 2017-09-29 16:59:09 +0200 |
commit | 205677c88cb01e2bbee278443867baed2c89e5fe (patch) | |
tree | 51f556078f90cfbc06a6255187676fc5840ec43f /solenv | |
parent | ba65817fb927b1b2db8872fc981fd878219ab968 (diff) |
gdb pretty-printers: fix StringPrinterHelper for gdb 8.0
Latest gdb release "lazy_string" validates the array size:
Traceback (most recent call last):
File "/work/lo/master/solenv/gdb/libreoffice/util/string.py", line
29, in to_string
return self.make_string(data, self.encoding, len)
File "/work/lo/master/solenv/gdb/libreoffice/util/string.py", line
66, in make_string
return data.lazy_string(encoding, length)
gdb.error: Length is larger than array size.
rtl_uString has "sal_Unicode buffer[1];", which is a lie
as the real size is the same as "length".
Taking the address of "buffer" appears to avoid the exception.
Change-Id: I85710b1adfae584ba09c8d517e9b49b290e79d8a
Diffstat (limited to 'solenv')
-rw-r--r-- | solenv/gdb/libreoffice/sal.py | 4 | ||||
-rw-r--r-- | solenv/gdb/libreoffice/util/string.py | 6 |
2 files changed, 5 insertions, 5 deletions
diff --git a/solenv/gdb/libreoffice/sal.py b/solenv/gdb/libreoffice/sal.py index c2e8384537be..8dcfaebe66e1 100644 --- a/solenv/gdb/libreoffice/sal.py +++ b/solenv/gdb/libreoffice/sal.py @@ -21,7 +21,7 @@ class RtlStringPrinter(StringPrinterHelper): super(RtlStringPrinter, self).__init__(typename, val, encoding) def data(self): - return self.val['buffer'] + return self.val['buffer'].address def length(self): return self.val['length'] @@ -37,7 +37,7 @@ class StringPrinter(StringPrinterHelper): def data(self): assert self.val['pData'] - return self.val['pData'].dereference()['buffer'] + return self.val['pData'].dereference()['buffer'].address def length(self): assert self.val['pData'] diff --git a/solenv/gdb/libreoffice/util/string.py b/solenv/gdb/libreoffice/util/string.py index 32583718f83b..742aabbaca27 100644 --- a/solenv/gdb/libreoffice/util/string.py +++ b/solenv/gdb/libreoffice/util/string.py @@ -52,15 +52,15 @@ class StringPrinterHelper(object): if not encoding: encoding = '' - if use_lazy_string: - return data.lazy_string(encoding, length) - # we need to determine length, if not given (for sal_Unicode*) if length < 0: length = 0 while data[length] != 0 and length <= 512: # arbitrary limit length += 1 + if use_lazy_string: + return data.lazy_string(encoding, length) + # The gdb.Value.string() conversion works on array of bytes, but # the length we have is the length of the string. So we must # multiply it by width of character if the string is Unicode. |