Kaydet (Commit) 205677c8 authored tarafından Michael Stahl's avatar Michael Stahl

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
üst ba65817f
......@@ -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']
......
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment