[Debian GNUstep maintainers] Bug#1087735: gworkspace.app: NSImage(instance) does not recognize subviews
Fred Kiefer
fredkiefer at gmx.de
Wed Nov 20 07:56:14 GMT 2024
Thank you Yavor for this patch. It looks correct to me and should resolve this specific issue. As for the code in the whole Address framework it will need a lot more of cleanup. Just skimming over it I noticed dozens of issues. i am quite surprised that this code does anything useful at all. If this library is in actual use, Riccardo and I should sit down together and try to clean it up. Otherwise it will come back and haunt us :-)
Great to see how you all worked together to understand and resolve this specific problem.
Cheers,
Fred
> Am 20.11.2024 um 02:23 schrieb Yavor Doganov <yavor at gnu.org>:
>
> Control: reassign -1 libaddressview0 0.4.8-5
> Control: retitle -1 [i386] VCFViewer inspector aborts GWorkspace, making it unusable
> Control: affects -1 gworkspace.app
> Control: tags -1 + patch
>
> Paul Seelig wrote:
>> Looks like finally found the root cause for making GWorkspace
>> malfunction on i386!
>
> Indeed!
>
>> There is a package named 'addresses-goodies-for-gnustep' containing
>> "VCFViewer - A GWorkspace inspector for viewing .vcf files". I had this
>> package installed and apparently this pulls in libAddressView. In amd64
>> this doesn't provoke GWorkspace any different, but in i386 it obviously
>> does.
>
> This is basically rarely tested code. The upstream build system does
> not build anything in the Goodies directory by default and we (we ==
> Debian GNUstep team) enabled the VCFViewer inspector recently (in
> 0.4.8-5, uploaded 27th of September to unstable). Excellent catch,
> once again I'd like to express my gratitude for your bug report.
>
>> Once i deinstalled 'addresses-goodies-for-gnustep' on i386, GWorkspace
>> worked fine as expected.
>
> Armed with this information, I was able to reproduce on my i386
> machine. But I get SIGSEGV and not your uncaught exception(s). The
> backtrace is:
>
> Program received signal SIGSEGV, Segmentation fault.
> 0xb727a373 in objc_msg_lookup () from /lib/i386-linux-gnu/libobjc.so.4
> (gdb) bt
> #0 0xb727a373 in objc_msg_lookup () at /lib/i386-linux-gnu/libobjc.so.4
> #1 0xafb11ef6 in -[ADPersonView calcSize]
> (self=0xafb3f4f2 <-[VCFViewer initWithFrame:inspector:]+738>, _cmd=0x5f4020) at ADPersonView.m:325
> #2 0x005ec280 in ()
>
> This shows a corrupt stack as in your case, but it's different
> (perhaps because this is a a pure bookworm system +
> GNUstep/GWworkspace built from tarballs +
> src:addresses-for-gnustep/0.4.8-5 with all patches applied built and
> installed in the USER domain along with the rest of GNUstep core).
>
> The code that corrupts the stack and confuses GDB is line 317 in
> Framework/AddressView/ADPersonView.m:
>
> sizeNeeded = [[self superview] frame].size;
>
> [self superview] returns nil for me (checked at runtime with GDB)
> which leads to a garbage value and the subsequent crash. The trouble
> is that I don't understand why it happens, and why this occurs on i386
> (and probably other 32-bit arches). Fred is probably the only person
> in the world who can explain this... NSView is a fairly complex
> class, and its internals have always been mystery to me.
>
> Please test the attached patch (it solves the problem for me):
>
> $ apt-get source addresses-for-gnustep && cd addresses-for-gnustep-*
> (Make sure it's 0.4.8-5; the trixie/sid version)
> $ cp /path/to/1087735.patch debian/patches
> $ echo 1087735.patch >> debian/patches/series
> # apt-get build-dep addresses-for-gnustep
> $ dpkg-buildpackage -us -uc
> # dpkg -i ../libaddressview0_0.4.8-5_i386.deb
>
> Then start GWorkspace to test.
>
>> Unless i am not utterly mistaken, then the debugging should probably
>> rather continue with 'addresses-for-gnustep'.
>
> That's right, I have reassigned the bug. Many thanks for your
> assistance, we are definitely getting closer to nailing this down.
-------------- next part --------------
--- addresses-for-gnustep-0.4.8.orig/Frameworks/AddressView/ADPersonView.m
+++ addresses-for-gnustep-0.4.8/Frameworks/AddressView/ADPersonView.m
@@ -312,7 +312,7 @@ static NSString *__defaultCountryCode =
NSSize sizeNeeded;
NSSize nvSize, nvMaxSize, nvMinSize;
- if(_fillsSuperview)
+ if(_fillsSuperview && [self superview])
{
sizeNeeded = [[self superview] frame].size;
if (sizeNeeded.width > 10)
-------------- next part --------------
More information about the pkg-GNUstep-maintainers
mailing list