Fwd: Re: gdb 8.0 "lazy_string" exception "Length is larger than array size"
Phil Muldoon <[email protected]>
| Newsgroups | gmane.comp.gdb.devel |
|---|---|
| Message-ID | <[email protected]> |
Oops noticed original email was addressed to [email protected]. I don't think this is an alias for [email protected] so forwarding my reply for completeness. Cheers Phil -------- Forwarded Message -------- Subject: Re: gdb 8.0 "lazy_string" exception "Length is larger than array size" Date: Tue, 26 Sep 2017 08:56:03 +0100 From: Phil Muldoon <[email protected]> To: Michael Stahl <[email protected]>, [email protected], Doug Evans <[email protected]>, Doug Evans <[email protected]> On 25/09/17 18:20, Michael Stahl wrote: > > hi, > > for the following string type: > > /** The implementation of a Unicode string. > */ > typedef struct SAL_DLLPUBLIC_RTTI _rtl_uString > { > oslInterlockedCount refCount; /* opaque */ > sal_Int32 length; > sal_Unicode buffer[1]; > } rtl_uString; > > the gdb python pretty-printer calls: > > return data.lazy_string(encoding, length) > > full python pretty-printer module: > > https://gerrit.libreoffice.org/gitweb?p=core.git;a=blob;f=solenv/gdb/libreoffice/util/string.py;h=32583718f83b2ad5707f75dd6327d9aa62764439;hb=5f210715fe090b4db4c80dcdee5f77dc404cf85c#l56 > > now this results in this exception: > > 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. > > this is with Fedora 26 "GNU gdb (GDB) Fedora 8.0.1-26.fc26" - in Fedora > 25 this did not throw an exception. > > apparently the problem is that the array is statically declared as > "buffer[1]", however its actual dynamic size is the same as "length". > > is this a bug in gdb or is lazy_string not intended to support this > scenario? > > regards, > michael > Yeah, it's determining the string is an array and finding that the declared length is larger then the array size. This is (as you noted) the initial length of the array is [1] and that array is then modified later. This code was added at 34b433203b5 by Doug Evans and it was noted it was a bug. I've not sure, though, fixing this bug may have had unintended consequences. I've CC'd Doug on the patch and maybe he could comment further. Cheers Phil