[Webkit-unassigned] [Bug 186431] New: [GTK] Crash when calling JSEvaluateScript and a JS exception is thrown
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri Jun 8 08:24:45 PDT 2018
https://bugs.webkit.org/show_bug.cgi?id=186431
Bug ID: 186431
Summary: [GTK] Crash when calling JSEvaluateScript and a JS
exception is thrown
Product: WebKit
Version: WebKit Nightly Build
Hardware: PC
OS: Linux
Status: NEW
Keywords: Gtk
Severity: Normal
Priority: P3
Component: WebKit Gtk
Assignee: webkit-unassigned at lists.webkit.org
Reporter: mike at vee.net
CC: bugs-noreply at webkitgtk.org
I'm getting various crashes in Geary when calling JSEvaluateScript from a WebExtension and the JS script being evaluated throws an error, using WebKitGTK 2.20.2.
The JSEvaluateScript call is pretty conventional — a short script that calls a method on a global object loaded via a user content manager. The vala source is here: https://gitlab.gnome.org/GNOME/geary/blob/master/src/client/web-process/web-process-extension.vala#L139 (see GearyWebExtension.execute_script).
The crash is occurring afterwards, when free'ing the JSValueRef passed as the last param (the JS exception) to JSEvaluateScript:
Thread 1 (Thread 0x7ffff7f94280 (LWP 12197)):
#0 0x00007ffff4de9e97 in __GI_raise (sig=sig at entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
set = {__val = {0, 93824992947760, 0, 80, 112, 140737301972894, 0, 511101108348, 18374686479671623680, 0, 0, 0, 0, 0, 18446744069414584320, 0}}
pid = <optimised out>
tid = <optimised out>
#1 0x00007ffff4deb801 in __GI_abort () at abort.c:79
save_stage = 1
act = {__sigaction_handler = {sa_handler = 0x2, sa_sigaction = 0x2}, sa_mask = {__val = {0 <repeats 14 times>, 140737488340592, 140737488340880}}, sa_flags = -14736, sa_restorer = 0x1000}
sigs = {__val = {32, 0 <repeats 15 times>}}
#2 0x00007ffff4e34897 in __libc_message (action=action at entry=do_abort, fmt=fmt at entry=0x7ffff4f61b9a "%s\n") at ../sysdeps/posix/libc_fatal.c:181
ap = {{gp_offset = 24, fp_offset = 32767, overflow_arg_area = 0x7fffffffc7a0, reg_save_area = 0x7fffffffc730}}
fd = <optimised out>
list = <optimised out>
nlist = <optimised out>
cp = <optimised out>
written = <optimised out>
#3 0x00007ffff4e3b90a in malloc_printerr (str=str at entry=0x7ffff4f63870 "double free or corruption (out)") at malloc.c:5350
#4 0x00007ffff4e42e75 in _int_free (have_lock=0, p=0x7fff8d860030, av=0x7ffff5196c40 <main_arena>) at malloc.c:4278
fb = <optimised out>
nextsize = <optimised out>
nextinuse = <optimised out>
prevsize = <optimised out>
fwd = <optimised out>
size = <optimised out>
nextchunk = <optimised out>
bck = <optimised out>
ar_ptr = 0x7ffff5196c40 <main_arena>
p = 0x7fff8d860030
hook = <optimised out>
mem = 0x7fff8d860040
hook = <optimised out>
#5 0x00007ffff4e42e75 in __GI___libc_free (mem=0x7fff8d860040) at malloc.c:3124
ar_ptr = 0x7ffff5196c40 <main_arena>
p = 0x7fff8d860030
hook = <optimised out>
mem = 0x7fff8d860040
hook = <optimised out>
#6 0x00007fff8e581319 in geary_web_extension_execute_script (self=0x555555a10810 [GearyWebExtension], context=0x7fff8d8dc058, script=0x7fff8e586524 "geary.selectionChanged();", line=0, error=0x7fffffffc908) at /home/mjg/Projects/GNOME/geary/src/client/web-process/web-process-extension.vala:144
result = 0x0
js_script = 0x7fffe01fbed0
_tmp0_ = 0x7fffe01fbed0
js_source = 0x7fffe01fbee8
_tmp1_ = 0x7fffe01fbee8
err = 0x7fff8d860040
_inner_error_ = 0x555555a8d170
__func__ = "geary_web_extension_execute_script"
[snip]
I thought that initially it was a vala bindings issue, but now I'm not so sure since if I pass in null to the exception parameter instead, I still get a segfault, but I'm not sure where since it also scrambles the stack:
Thread 1 (Thread 0x7ffff7f94280 (LWP 676)):
#0 0x00007ffff6a92420 in () at /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37
#1 0x00007ffff6a99423 in () at /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37
#2 0x00007ffff6506234 in () at /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37
#3 0x00007ffff65148b0 in () at /usr/lib/x86_64-linux-gnu/libwebkit2gtk-4.0.so.37
#4 0x00007ffff1870adb in JSC::JSObject::hasPropertyGeneric(JSC::ExecState*, JSC::PropertyName, JSC::PropertySlot::InternalMethodType) const () at /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18
#5 0x00007ffff17a04d7 in () at /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18
#6 0x00007ffff1656bf1 in () at /usr/lib/x86_64-linux-gnu/libjavascriptcoregtk-4.0.so.18
#7 0x0000085f0108b94c in ()
#8 0x0000000000000000 in ()
^-- that's literally everything that gdb prints out for the thread.
This does not happen when the JS code being evaluated does not raise an exception, which is usually the case.
I'll post a version of that second stack with symbols here ASAP, but downloading the dbgsym packages will currently take a few hours and I need to crash for the night. Let me know if you want to see any of the generated C code for the two different versions of the call.
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20180608/05b412ea/attachment.html>
More information about the webkit-unassigned
mailing list