WidgetsDemo crash on iOS

Hi, I’m testing WidgetsDemo with a keyboard on an iPad, and I’m getting a crash when I use the Tab key to navigate between Components in the ‘Misc’ tab of the demo. The crash happens when the focus leaves the ComboBox component. It also happens in the Sliders tab, when the texteditor of a slider has focus and you press tab to change the focus.

The crash report (with ASAN) looks like this, the line crashing being the “target->setTemporaryUnderlining ({});” call in “JuceTextView insertText:


==51810==ERROR: AddressSanitizer: heap-use-after-free on address 0x000162865568 at pc 0x000103073bbc bp 0x00016d1e1bd0 sp 0x00016d1e1bc8
READ of size 8 at 0x000162865568 thread T0
    #0 0x103073bb8 in -[JuceTextView insertText:]+0x478 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100457bb8)
    #1 0x18f1780e4 in <redacted>+0xf8 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x9630e4)
    #2 0x18f1764fc in <redacted>+0x44 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x9614fc)
.....
    #18 0x18ebb62c8 in UIApplicationMain+0x150 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x3a12c8)
    #19 0x103094bb8 in juce::juce_iOSMain(int, char const**, void*)+0x78 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100478bb8)
    #20 0x102da5de8 in juce::JUCEApplicationBase::main(int, char const**)+0xf4 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100189de8)
    #21 0x102c21114 in main+0xb4 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100005114)
    #22 0x1aafac95c  (<unknown module>)
0x000162865568 is located 232 bytes inside of 824-byte region [0x000162865480,0x0001628657b8)
freed by thread T0 here:
    #0 0x10489b6e8 in wrap__ZdlPv+0x74 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib:arm64e+0x4f6e8)
    #1 0x103244c38 in juce::TextEditor::~TextEditor()+0x20 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100628c38)
    #2 0x10355cbb8 in std::__1::default_delete<juce::TextEditor>::operator()(juce::TextEditor*) const+0x9c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100940bb8)
    #3 0x103215d5c in std::__1::unique_ptr<juce::TextEditor, std::__1::default_delete<juce::TextEditor> >::reset(juce::TextEditor*)+0xc0 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005f9d5c)
    #4 0x1032160cc in juce::Label::hideEditor(bool)+0x25c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005fa0cc)
    #5 0x10321a924 in juce::Label::textEditorReturnKeyPressed(juce::TextEditor&)+0x1d8 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005fe924)
    #6 0x1032189d4 in juce::Label::inputAttemptWhenModal()+0x198 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005fc9d4)
    #7 0x1030e79cc in juce::Component::internalModalInputAttempt()+0xa4 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004cb9cc)
    #8 0x1030f54fc in juce::Component::moveKeyboardFocusToSibling(bool)+0x3dc (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004d94fc)
    #9 0x1032845e4 in juce::ComponentPeer::handleKeyPress(juce::KeyPress const&)+0x508 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1006685e4)
    #10 0x103283f6c in juce::ComponentPeer::handleKeyPress(int, wchar_t)+0x220 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100667f6c)
    #11 0x103074204 in -[JuceTextView insertText:]::$_1::operator()(wchar_t) const+0x30c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100458204)
    #12 0x103073a74 in -[JuceTextView insertText:]+0x334 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100457a74)
    #13 0x18f1780e4 in <redacted>+0xf8 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x9630e4)
    #14 0x18f1764fc in <redacted>+0x44 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x9614fc)
...
    #27 0x18c6c0eac in CFRunLoopRunSpecific+0x260 (/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation:arm64e+0x80eac)
    #28 0x1c6008364 in GSEventRunModal+0xa0 (/System/Library/PrivateFrameworks/GraphicsServices.framework/GraphicsServices:arm64e+0x1364)
    #29 0x18ebb6664 in <redacted>+0x374 (/System/Library/PrivateFrameworks/UIKitCore.framework/UIKitCore:arm64e+0x3a1664)
previously allocated by thread T0 here:
    #0 0x10489b2a8 in wrap__Znwm+0x74 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/Frameworks/libclang_rt.asan_ios_dynamic.dylib:arm64e+0x4f2a8)
    #1 0x103218b1c in juce::Label::createEditorComponent()+0x130 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005fcb1c)
    #2 0x103210458 in juce::Label::showEditor()+0x1c4 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005f4458)
    #3 0x103219e9c in juce::Label::focusGained(juce::Component::FocusChangeType)+0xa0 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1005fde9c)
    #4 0x1030f2ca0 in juce::Component::internalKeyboardFocusGain(juce::Component::FocusChangeType, juce::WeakReference<juce::Component, juce::ReferenceCountedObject> const&)+0x9c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004d6ca0)
    #5 0x1030f4f48 in juce::Component::takeKeyboardFocus(juce::Component::FocusChangeType)+0x41c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004d8f48)
    #6 0x1030eb0ac in juce::Component::grabKeyboardFocusInternal(juce::Component::FocusChangeType, bool)+0x248 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004cf0ac)
    #7 0x1030f55cc in juce::Component::moveKeyboardFocusToSibling(bool)+0x4ac (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1004d95cc)
    #8 0x1032845e4 in juce::ComponentPeer::handleKeyPress(juce::KeyPress const&)+0x508 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x1006685e4)
    #9 0x103283f6c in juce::ComponentPeer::handleKeyPress(int, wchar_t)+0x220 (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100667f6c)
    #10 0x103074204 in -[JuceTextView insertText:]::$_1::operator()(wchar_t) const+0x30c (/private/var/containers/Bundle/Application/D0D1E462-C52E-47D5-95B7-DD587B58517B/WidgetsDemo.app/WidgetsDemo:arm64+0x100458204)
    #11 0x103073a74 in -[JuceTextView insertText:]+0x334

Thanks, I think I’ve found a fix.

The fix is now on develop:

2 Likes