curiousdannii-testing / inform7-imported-bugs

0 stars 0 forks source link

[I7-2039] [Mantis 2076] segfault when trying to stop or restart the integrated interpreter #45

Closed curiousdannii-testing closed 2 years ago

curiousdannii-testing commented 2 years ago

Reported by : autumnontape

Description :

I installed gnome-inform7 from the Arch User Repository <https://aur.archlinux.org/packages/gnome-inform7/> yesterday and found that after running a story, pressing the run button again would cause the IDE to exit. The re-run and stop buttons each have the same effect. The result is the same in either Z-machine or Glulx mode.

This doesn't make the IDE unusable, but it is extremely irritating, since it means I have to restart it every time I recompile my story!

I tried running the IDE under gdb, and I've attached the log in the "Additional Information" section.

Steps to reproduce :


Additional information :

$ gdb /usr/bin/gnome-inform7
GNU gdb (GDB) 8.2
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-pc-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /usr/bin/gnome-inform7...(no debugging symbols found)...done.
(gdb) r
Starting program: /usr/bin/gnome-inform7
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/usr/lib/libthread_db.so.1".
[New Thread 0x7fffe885a700 (LWP 4127)]
[New Thread 0x7fffe3fff700 (LWP 4128)]
[New Thread 0x7fffe3391700 (LWP 4129)]
[New Thread 0x7fffe1d9a700 (LWP 4130)]
[Detaching after fork from child process 4131]
[New Thread 0x7fffe11ab700 (LWP 4133)]
[New Thread 0x7fffe08a8700 (LWP 4134)]
[New Thread 0x7fff92e85700 (LWP 4135)]
[New Thread 0x7fff92167700 (LWP 4136)]
[New Thread 0x7fff91966700 (LWP 4137)]
[New Thread 0x7fff91165700 (LWP 4138)]
[New Thread 0x7fff90964700 (LWP 4139)]
[New Thread 0x7fff7bfff700 (LWP 4140)]
[New Thread 0x7fff7b7fe700 (LWP 4141)]
[New Thread 0x7fff7ab05700 (LWP 4142)]

Thread 18 "glk" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7fffe1d9a700 (LWP 4147)]
0x00007ffff7fe0005 in _dl_relocate_object () from /lib64/ld-linux-x86-64.so.2
(gdb) bt
#0 0x00007ffff7fe0005 in _dl_relocate_object () at /lib64/ld-linux-x86-64.so.2
#1 0x00007ffff7fe7406 in dl_open_worker () at /lib64/ld-linux-x86-64.so.2
#2 0x00007ffff37e3e77 in _dl_catch_exception () at /usr/lib/libc.so.6
#3 0x00007ffff7fe6dff in _dl_open () at /lib64/ld-linux-x86-64.so.2
#4 0x00007ffff37e3371 in do_dlopen () at /usr/lib/libc.so.6
#5 0x00007ffff37e3e77 in _dl_catch_exception () at /usr/lib/libc.so.6
#6 0x00007ffff37e3f13 in _dl_catch_error () at /usr/lib/libc.so.6
#7 0x00007ffff37e3477 in dlerror_run () at /usr/lib/libc.so.6
#8 0x00007ffff37e351a in __libc_dlopen_mode () at /usr/lib/libc.so.6
#9 0x00007ffff38829ac in pthread_cancel_init () at /usr/lib/libpthread.so.0
#10 0x00007ffff3882bd4 in _Unwind_ForcedUnwind () at /usr/lib/libpthread.so.0
#11 0x00007ffff3880cd5 in __pthread_unwind () at /usr/lib/libpthread.so.0
#12 0x00007ffff3878d19 in () at /usr/lib/libpthread.so.0
#13 0x00007ffff3a53b9c in () at /usr/lib/libglib-2.0.so.0
#14 0x00005555555af540 in ()
#15 0x00005555555b8979 in glk_tick ()
#16 0x00005555555b4f1f in glk_select ()
#17 0x00005555555b7ef9 in gidispatch_call ()
#18 0x00007fff7803b216 in () at /usr/lib/gnome-inform7/glulxe.so
#19 0x00007fff78037d4f in () at /usr/lib/gnome-inform7/glulxe.so
#20 0x00007fff7803bd1c in glk_main () at /usr/lib/gnome-inform7/glulxe.so
#21 0x00005555555b1072 in ()
#22 0x00007ffff3a4e3eb in () at /usr/lib/libglib-2.0.so.0
-Type for more, q to quit, c to continue without paging-
#23 0x00007ffff3877a9d in start_thread () at /usr/lib/libpthread.so.0
#24 0x00007ffff37a7a43 in clone () at /usr/lib/libc.so.6
(gdb) quit
A debugging session is active.

Inferior 1 [process 4123] will be killed.

Quit anyway? (y or n) y

imported from: [Mantis 2076] segfault when trying to stop or restart the integrated interpreter
  • status: Closed
  • resolution: Open
  • resolved: 2022-04-07T05:02:43+10:00
  • imported: 2022/01/10
curiousdannii-testing commented 2 years ago

557058:4c095ffd-6d6f-47ce-9e73-77c613347b86:

Comment by pchimento :
Oh, my goodness, stunning debugging skills you have.

I think we should at least prevent webkitgtk from loading any plugins, that would solve this problem.

curiousdannii-testing commented 2 years ago

557058:4c095ffd-6d6f-47ce-9e73-77c613347b86:

Comment by autumnontape :
Stunningly, the best workaround for this seems to be to uninstall the freshplayerplugin package, which I'd had installed from the Arch User Repository.

That plugin, which was presumably being loaded by webkitgtk just because it was there, pulled in libcrypto.so.1.1. For whatever reason, the link_map struct that represented that shared object in the glibc linker never had its l_versions or l_relocated fields set. When pthread ended the glk thread, it asked for libgcc_s.so.1, which was already loaded, so dlopen-ing it again should have been straightforward. But in the process, the linker noticed that libcrypto wasn't relocated, so it tried to relocate it; and since libcrypto's l_versions was NULL, this led to a segmentation fault.

I fully sympathize if you don't feel inclined to track down the deeper cause of this horrifying bug.

curiousdannii-testing commented 2 years ago

70121:fb841d86-738c-48d6-abc7-7081ea9ee286:

In the upcoming version, webkitgtk no longer loads plugins, so I assume this is fixed and should be able to be closed. Please feel free to reopen it if you see it again.