JUCE icon indicating copy to clipboard operation
JUCE copied to clipboard

[Bug]: AU Pressing escape key with a webview causes crash

Open colinsullivan opened this issue 10 months ago • 3 comments

Detailed steps on how to reproduce the bug

Create an AU plugin project with projucer Put a webview in it, load any website Launch the AU in Ableton Live 12 Press escape key

Crash

I can repro with this project: https://github.com/colinsullivan/juce-webview-simple

Attached are some screenshots of the stack traces I am seeing when I attach a debugger to Ableton. Something in that key handling code path, specifically for macOS / AU and webview. If the webview is not added to the app, the crash does not occur.

Image Image Image Image

What is the expected behaviour?

AU doesn't crash the DAW when user presses a key

Operating systems

macOS

What versions of the operating systems?

Ventura 13.6.3 Sonoma 14.4.1 Sequioa 15.1.1

Architectures

Arm64/aarch64

Stacktrace

MainThread (1) Queue : com.apple.main-thread (serial)
#0	0x00000001a805df94 in objc_exception_throw ()
#1	0x00000001a86299b4 in _CFThrowFormattedException ()
#2	0x00000001a8467f80 in -[__NSArrayM objectAtIndex:] ()
#3	0x00000001ab95eb34 in -[NSView performKeyEquivalent:] ()
#4	0x00000001abec8fec in -[NSWindow _commonPerformKeyEquivalent:conditionally:] ()
#5	0x00000001abf39454 in -[NSWindow(NSEventRouting) _cancelKey:] ()
#6	0x00000001ab8e4e00 in -[NSResponder tryToPerform:with:] ()
#7	0x00000001abecb524 in -[NSWindow tryToPerform:with:] ()
#8	0x00000001030d2970 in ___lldb_unnamed_symbol249322 ()
#9	0x00000002f5175874 in void juce::ObjCMsgSendSuper<NSView, void, objc_selector*>(objc_object*, objc_selector*, objc_selector*) at /Applications/JUCE/modules/juce_core/native/juce_ObjCHelpers_mac.h:186
#10	0x00000002f5175688 in void juce::ObjCClass<NSView>::sendSuperclassMessage<void, objc_selector*>(objc_object*, objc_selector*, objc_selector*) at /Applications/JUCE/modules/juce_core/native/juce_ObjCHelpers_mac.h:359
#11	0x00000002f5175564 in juce::JuceNSViewClass::JuceNSViewClass()::'lambda'(objc_object*, objc_selector*, objc_selector*)::operator()(objc_object*, objc_selector*, objc_selector*) const at /Applications/JUCE/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm:2436
#12	0x00000002f51755b8 in juce::JuceNSViewClass::JuceNSViewClass()::'lambda'(objc_object*, objc_selector*, objc_selector*)::__invoke(objc_object*, objc_selector*, objc_selector*) at /Applications/JUCE/modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm:2406
#13	0x00000001c94ce35c in -[WKWebView(WKInternalMac) _web_superDoCommandBySelector:] ()
#14	0x00000001c95b3148 in WebKit::WebViewImpl::executeSavedCommandBySelector(objc_selector*) ()
#15	0x00000001c95a7918 in WebKit::WebPageProxy::executeSavedCommandBySelector(WTF::String const&, WTF::CompletionHandler<void (bool)>&&) ()
#16	0x00000001c99d8828 in bool IPC::handleMessageSynchronous<Messages::WebPageProxy::ExecuteSavedCommandBySelector, WebKit::WebPageProxy, WebKit::WebPageProxy, void (WTF::String const&, WTF::CompletionHandler<void (bool)>&&)>(IPC::Connection&, IPC::Decoder&, WTF::UniqueRef<IPC::Encoder>&, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(WTF::String const&, WTF::CompletionHandler<void (bool)>&&)) ()
#17	0x00000001c99d607c in WebKit::WebPageProxy::didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, WTF::UniqueRef<IPC::Encoder>&) ()
#18	0x00000001c9a87398 in IPC::MessageReceiverMap::dispatchSyncMessage(IPC::Connection&, IPC::Decoder&, WTF::UniqueRef<IPC::Encoder>&) ()
#19	0x00000001c96d00b4 in WebKit::WebProcessProxy::didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, WTF::UniqueRef<IPC::Encoder>&) ()
#20	0x00000001c9a82af4 in IPC::Connection::dispatchMessage(std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder>>) ()
#21	0x00000001c9a7edf4 in IPC::Connection::SyncMessageState::ConnectionAndIncomingMessage::dispatch() ()
#22	0x00000001c9a846c4 in WTF::Detail::CallableWrapper<IPC::Connection::SyncMessageState::processIncomingMessage(IPC::Connection&, std::__1::unique_ptr<IPC::Decoder, std::__1::default_delete<IPC::Decoder>>&)::$_5, void>::call() ()
#23	0x00000001c28e50c4 in WTF::RunLoop::performWork() ()
#24	0x00000001c28e5f90 in WTF::RunLoop::performWork(void*) ()
#25	0x00000001a84c65ac in __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ ()
#26	0x00000001a84c6540 in __CFRunLoopDoSource0 ()
#27	0x00000001a84c62b0 in __CFRunLoopDoSources0 ()
#28	0x00000001a84c4eb8 in __CFRunLoopRun ()
#29	0x00000001a84c4428 in CFRunLoopRunSpecific ()
#30	0x00000001b1d18df0 in RunCurrentEventLoopInMode ()
#31	0x00000001b1d18c2c in ReceiveNextEventCommon ()
#32	0x00000001b1d18984 in _BlockUntilNextEventMatchingListInModeWithFilter ()
#33	0x00000001ab6ec908 in _DPSNextEvent ()
#34	0x00000001ab6ebaa4 in -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] ()
#35	0x00000001ab6dff08 in -[NSApplication run] ()
#36	0x00000001019828c0 in ___lldb_unnamed_symbol127871 ()
#37	0x00000001a808ff28 in start ()

Plug-in formats (if applicable)

AU

Plug-in host applications (DAWs) (if applicable)

Ableton Live 12

Testing on the develop branch

The bug is present on the develop branch

Code of Conduct

  • [x] I agree to follow the Code of Conduct

colinsullivan avatar Feb 26 '25 17:02 colinsullivan

See related issue: https://github.com/juce-framework/JUCE/issues/1522

colinsullivan avatar Mar 18 '25 16:03 colinsullivan

We investigated this issue and pushed an initial change for a problem we spotted in JUCE here: https://github.com/juce-framework/juce/commit/4deee6976b4268f74b5d7f4041b2d62508aa8a56

Unfortunately this change doesn't resolve the crash itself, and our current belief is that the crash is caused by an issue in Live itself. We've reported the issue to Ableton and we're waiting to hear back.

reuk avatar Mar 18 '25 17:03 reuk

There's a new commit addressing this issue on develop, which seems to fix this problem entirely in our testing https://github.com/juce-framework/JUCE/commit/7f4176e259fa27fe8751ee5d553039a9e250182d

szarvas avatar Mar 28 '25 15:03 szarvas

Closing this due to inactivity after pushing related fixes. If you're still seeing problems, please reopen this issue or create a new issue.

reuk avatar Jul 02 '25 11:07 reuk