Details
-
Bug
-
Resolution: Unresolved
-
P1: Critical
-
None
-
6.7.3, 6.8.3, 6.9.0
-
None
Description
QTBUG-77210 QML Image object causes a crash when it gets deleted while it's still loading - Qt Bug Tracker
This bug seems to have been around since 6.7.3 and continues to this day.
Simple demo
// code placeholder import QtQuick import QtQuick.Controls ApplicationWindow{ width: 640 height: 480 visible: true title: qsTr("Hello World") property var currentImageItem id:window Component { id:imageCom Image { anchors.fill: parent source:"https://upload.wikimedia.org/wikipedia/commons/3/3f/Fronalpstock_big.jpg" } } footer: Row { Button{ text:"createImage" onClicked: { currentImageItem = imageCom.createObject(window) } } Button { text:"destroy" onClicked: { if(currentImageItem) currentImageItem.destroy() } } } }
Quickly click two buttons back and forth to trigger it. Loading pictures in TextArea, and other Views can be triggered.
It is necessary to ensure that the Image object is destroyed before loading, otherwise it may be cached and cannot be triggered. It is recommended to test it in a poor network environment.
Browser Trigger Probability: Edge/Chrome > Firefox
console
Uncaught RuntimeError: memory access out of bounds
at imagedemo.wasm.emscripten_builtin_malloc (imagedemo.wasm:0x143ef3d)
at imagedemo.wasm.QArrayData::allocate1(QArrayData**, int, QArrayData::AllocationOption) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QByteArray::QByteArray(int, Qt::Initialization) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QNetworkReplyWasmImplPrivate::stateChange(emscripten_fetch_t*) (http://localhost:30000/imagedemo.wasm)
at imagedemo.js:13246:68
at callUserCallback (imagedemo.js:7730:5)
at doCallback (imagedemo.js:13226:7)
at reportReadyStateChange (imagedemo.js:13245:5)
at xhr.onreadystatechange (imagedemo.js:13072:25)
$emscripten_builtin_malloc @ imagedemo.wasm:0x143ef3d
$QArrayData::allocate1(QArrayData**, int, QArrayData::AllocationOption) @ imagedemo.wasm:0x12d0cd0
$QByteArray::QByteArray(int, Qt::Initialization) @ imagedemo.wasm:0x1272659
$QNetworkReplyWasmImplPrivate::stateChange(emscripten_fetch_t*) @ imagedemo.wasm:0x11639a3
(匿名) @ imagedemo.js:13246
callUserCallback @ imagedemo.js:7730
doCallback @ imagedemo.js:13226
reportReadyStateChange @ imagedemo.js:13245
xhr.onreadystatechange @ imagedemo.js:13072
XMLHttpRequest.send
fetchXHR @ imagedemo.js:13075
performUncachedXhr @ imagedemo.js:13250
getRequest.onsuccess @ imagedemo.js:13156
IndexedDB
fetchLoadCachedData @ imagedemo.js:13130
_emscripten_start_fetch @ imagedemo.js:13280
$emscripten_fetch @ imagedemo.wasm:0x1162939
$QNetworkReplyWasmImplPrivate::doSendRequest()::$_0::operator()() @ imagedemo.wasm:0x1165414
$std::_2::function::func<QNetworkReplyWasmImplPrivate::doSendRequest()::$_0, std::_2::allocator<QNetworkReplyWasmImplPrivate::doSendRequest()::$_0>, void ()>::operator()() @ imagedemo.wasm:0x1164b69
invoke_vi @ imagedemo.js:14372
$QEventDispatcherWasm::runOnMainThread(std::__2::function<void ()>) @ imagedemo.wasm:0x13fd036
$QNetworkReplyWasmImplPrivate::doSendRequest() @ imagedemo.wasm:0x11638ea
$QNetworkReplyWasmImplPrivate::setup(QNetworkAccessManager::Operation, QNetworkRequest const&, QIODevice*) @ imagedemo.wasm:0x116335e
$QNetworkAccessManager::createRequest(QNetworkAccessManager::Operation, QNetworkRequest const&, QIODevice*) @ imagedemo.wasm:0x1127fed
$QNetworkAccessManager::get(QNetworkRequest const&) @ imagedemo.wasm:0x112769f
$QQuickPixmapReader::processJob(QQuickPixmapReply*, QUrl const&, QString const&, QQmlImageProviderBase::ImageType, QSharedPointer<QQuickImageProvider> const&) @ imagedemo.wasm:0x5c34ff
$QQuickPixmapReader::processJobs() @ imagedemo.wasm:0x5c1008
$ReaderThreadExecutionEnforcer::event(QEvent*) @ imagedemo.wasm:0x5c53d5
$QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) @ imagedemo.wasm:0x11cf996
$QCoreApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x11cfbcc
$QGuiApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x81f1e4
invoke_iiii @ imagedemo.js:14394
$QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) @ imagedemo.wasm:0x11d0313
$QCoreApplication::sendPostedEvents(QObject*, int) @ imagedemo.wasm:0x11d04bc
$QEventDispatcherWasm::processPostedEvents() @ imagedemo.wasm:0x13fd0fb
$QWasmEventDispatcher::processPostedEvents() @ imagedemo.wasm:0x5329b
$std::_2::function::func<QEventDispatcherWasm::wakeUp()::$_0, std::_2::allocator<QEventDispatcherWasm::wakeUp()::$_0>, void ()>::operator()() @ imagedemo.wasm:0x13fd399
$(anonymous namespace)::trampoline(void*)::$0::_invoke(void*) @ imagedemo.wasm:0x13fa694
wrapper @ imagedemo.js:8453
callUserCallback @ imagedemo.js:7730
(匿名) @ imagedemo.js:7738
setTimeout
safeSetTimeout @ imagedemo.js:7737
_emscripten_async_call @ imagedemo.js:8457
invoke_viii @ imagedemo.js:14361
$QEventDispatcherWasm::wakeUp() @ imagedemo.wasm:0x13fcc45
$QCoreApplication::postEvent(QObject*, QEvent*, int) @ imagedemo.wasm:0x11d0aba
$QQuickPixmapReader::startJob(QQuickPixmapReply*) @ imagedemo.wasm:0x5c6543
$QQuickPixmap::load(QQmlEngine*, QUrl const&, QRect const&, QSize const&, QFlags<QQuickPixmap::Option>, QQuickImageProviderOptions const&, int, int, double) @ imagedemo.wasm:0x5cc183
$QQuickImageBase::loadPixmap(QUrl const&, QFlags<QQuickImageBase::LoadPixmapOption>) @ imagedemo.wasm:0x3fff83
$QQuickImageBase::load() @ imagedemo.wasm:0x4003fa
$non-virtual thunk to QQuickImageBase::componentComplete() @ imagedemo.wasm:0x400b1b
$QQmlObjectCreator::finalize(QQmlInstantiationInterrupt&) @ imagedemo.wasm:0xfeb19d
$QQmlComponentPrivate::complete(QQmlEnginePrivate*, QQmlComponentPrivate::ConstructionState*) @ imagedemo.wasm:0xf67ed0
$QQmlComponentPrivate::completeCreate() @ imagedemo.wasm:0xf6758f
$QQmlComponent::completeCreate() @ imagedemo.wasm:0xf6c7c2
$QQmlComponentPrivate::createWithProperties(QObject*, QMap<QString, QVariant> const&, QQmlContext*, QQmlComponentPrivate::CreateBehavior, bool) @ imagedemo.wasm:0xf6a6aa
$QQmlComponent::createObject(QObject*, QMap<QString, QVariant> const&) @ imagedemo.wasm:0xf6eb50
$QQmlComponent::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) @ imagedemo.wasm:0xf70279
$QQmlComponent::qt_metacall(QMetaObject::Call, int, void**) @ imagedemo.wasm:0xf70534
$QMetaObject::metacall(QObject*, QMetaObject::Call, int, void**) @ imagedemo.wasm:0x11d9a8c
$QQmlObjectOrGadget::metacall(QMetaObject::Call, int, void**) const @ imagedemo.wasm:0xfeed2e
$QV4::CallMethod(QQmlObjectOrGadget const&, int, QMetaType, int, QMetaType const*, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) @ imagedemo.wasm:0xe91610
$QV4::QObjectMethod::callPrecise(QQmlObjectOrGadget const&, QQmlPropertyData const&, QV4::ExecutionEngine*, QV4::CallData*, QMetaObject::Call) @ imagedemo.wasm:0xe8ed65
$QV4::QObjectMethod::callInternal(QV4::Value const*, QV4::Value const*, int) const @ imagedemo.wasm:0xe96c47
$QV4::QObjectMethod::virtualCall(QV4::FunctionObject const*, QV4::Value const*, QV4::Value const*, int) @ imagedemo.wasm:0xe962ae
$QV4::Moth::VME::interpret(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*, char const*) @ imagedemo.wasm:0xf11d13
$QV4::Moth::VME::exec(QV4::JSTypesStackFrame*, QV4::ExecutionEngine*) @ imagedemo.wasm:0xf0d15f
$QV4::doCall(QV4::Function*, QV4::Value const*, QV4::Value const*, int, QV4::ExecutionContext*) @ imagedemo.wasm:0xe3a795
$QV4::Function::call(QV4::Value const*, QV4::Value const*, int, QV4::ExecutionContext*) @ imagedemo.wasm:0xe39b69
$QV4::Function::call(QObject*, void*, QMetaType const, int, QV4::ExecutionContext*) @ imagedemo.wasm:0xe39738
$QQmlJavaScriptExpression::evaluate(void*, QMetaType const, int) @ imagedemo.wasm:0xfafcd3
$QQmlBoundSignalExpression::evaluate(void**) @ imagedemo.wasm:0xf541ea
$QQmlBoundSignal_callback(QQmlNotifierEndpoint*, void**) @ imagedemo.wasm:0xf5486f
$QQmlNotifier::emitNotify(QQmlNotifierEndpoint*, void**) @ imagedemo.wasm:0xfdd25b
$QQmlData::signalEmitted(QAbstractDeclarativeData*, QObject*, int, void**) @ imagedemo.wasm:0xf7dc03
$void doActivate<false>(QObject*, int, void**) @ imagedemo.wasm:0x1215966
$QMetaObject::activate(QObject*, QMetaObject const*, int, void**) @ imagedemo.wasm:0x121efc4
$QQuickAbstractButtonPrivate::trigger(bool) @ imagedemo.wasm:0x2c5219
$QQuickAbstractButtonPrivate::handleRelease(QPointF const&, unsigned long) @ imagedemo.wasm:0x2c507c
$QQuickControl::touchEvent(QTouchEvent*) @ imagedemo.wasm:0x2e31db
$QQuickItem::event(QEvent*) @ imagedemo.wasm:0x421933
$QQuickAbstractButton::event(QEvent*) @ imagedemo.wasm:0x2c81de
$QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) @ imagedemo.wasm:0x11cf996
$QCoreApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x11cfbcc
$QGuiApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x81f1e4
invoke_iiii @ imagedemo.js:14394
$QCoreApplication::sendEvent(QObject*, QEvent*) @ imagedemo.wasm:0x11d06f2
$QQuickDeliveryAgentPrivate::deliverMatchingPointsToItem(QQuickItem*, bool, QPointerEvent*, bool) @ imagedemo.wasm:0x5b589a
$QQuickDeliveryAgentPrivate::deliverUpdatedPoints(QPointerEvent*) @ imagedemo.wasm:0x5b0255
$QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent*) @ imagedemo.wasm:0x5acf28
$QQuickDeliveryAgentPrivate::handleTouchEvent(QTouchEvent*) @ imagedemo.wasm:0x5aae07
$QQuickDeliveryAgent::event(QEvent*) @ imagedemo.wasm:0x5a9e3c
$QQuickWindow::event(QEvent*) @ imagedemo.wasm:0x4a7b25
$QQuickWindowQmlImpl::event(QEvent*) @ imagedemo.wasm:0x4b8072
$QCoreApplicationPrivate::notify_helper(QObject*, QEvent*) @ imagedemo.wasm:0x11cf996
$QCoreApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x11cfbcc
$QGuiApplication::notify(QObject*, QEvent*) @ imagedemo.wasm:0x81f1e4
invoke_iiii @ imagedemo.js:14394
$QCoreApplication::sendSpontaneousEvent(QObject*, QEvent*) @ imagedemo.wasm:0x11d0871
$QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent*) @ imagedemo.wasm:0x822c2d
$QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) @ imagedemo.wasm:0x81f83f
$bool QWindowSystemHelper<QWindowSystemInterface::SynchronousDelivery>::handleEvent<QWindowSystemInterfacePrivate::TouchEvent, QWindow*, unsigned long, QEvent::Type, QPointingDevice const*, QList<QEventPoint>, QFlags<Qt::KeyboardModifier>>(QWindow*, unsigned long, QEvent::Type, QPointingDevice const*, QList<QEventPoint>, QFlags<Qt::KeyboardModifier>) @ imagedemo.wasm:0x8672ca
$bool QWindowSystemHelper<QWindowSystemInterface::DefaultDelivery>::handleEvent<QWindowSystemInterfacePrivate::TouchEvent, QWindow*, unsigned long, QEvent::Type, QPointingDevice const*, QList<QEventPoint>, QFlags<Qt::KeyboardModifier>>(QWindow*, unsigned long, QEvent::Type, QPointingDevice const*, QList<QEventPoint>, QFlags<Qt::KeyboardModifier>) @ imagedemo.wasm:0x867078
$bool QWindowSystemInterface::handleTouchEvent<QWindowSystemInterface::DefaultDelivery>(QWindow*, unsigned long, QPointingDevice const*, QList<QWindowSystemInterface::TouchPoint> const&, QFlags<Qt::KeyboardModifier>) @ imagedemo.wasm:0x866ede
$ClientArea::deliverEvent(PointerEvent const&) @ imagedemo.wasm:0x6c4f7
$ClientArea::processPointer(PointerEvent const&) @ imagedemo.wasm:0x6b9dd
$std::_2::function::func<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_2, std::_2::allocator<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_2>, void (emscripten::val)>::operator()(emscripten::val&&) @ imagedemo.wasm:0x6da27
invoke_vii @ imagedemo.js:14383
$qstdweb::EventListener::handleEvent(emscripten::val) @ imagedemo.wasm:0x13f33ed
invoke_vii @ imagedemo.js:14383
$emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (qstdweb::EventListener::)(emscripten::val), void, qstdweb::EventListener, emscripten::val>::invoke(void (qstdweb::EventListener::* const&)(emscripten::val), qstdweb::EventListener*, emscripten::_EM_VAL*) @ imagedemo.wasm:0x13f34fe
dynCall @ imagedemo.js:6328
(匿名) @ imagedemo.js:6334
QtEventListener.handleEvent @ VM218:8瞭解這個錯誤
imagedemo.js:14386 Uncaught RuntimeError: memory access out of bounds
at imagedemo.wasm.emscripten_builtin_malloc (http://localhost:30000/imagedemo.wasm:wasm-function[62446]:0x143ef3d)
at imagedemo.wasm.QArrayData::allocate(QArrayData**, int, int, int, QArrayData::AllocationOption) (http://localhost:30000/imagedemo.wasm:wasm-function[59665]:0x12d0bf2)
at imagedemo.wasm.QList<QWindowSystemInterface::TouchPoint>::reserve(int) (http://localhost:30000/imagedemo.wasm:wasm-function[1327]:0x6ca6a)
at imagedemo.wasm.ClientArea::deliverEvent(PointerEvent const&) (http://localhost:30000/imagedemo.wasm:wasm-function[1323]:0x6c304)
at imagedemo.wasm.ClientArea::processPointer(PointerEvent const&) (http://localhost:30000/imagedemo.wasm:wasm-function[1322]:0x6b9dd)
at imagedemo.wasm.std::_2::function::func<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0, std::_2::allocator<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0>, void (emscripten::val)>::operator()(emscripten::val&&) (http://localhost:30000/imagedemo.wasm:wasm-function[1339]:0x6d763)
at invoke_vii (http://localhost:30000/imagedemo.js:14383:29)
at imagedemo.wasm.qstdweb::EventListener::handleEvent(emscripten::val) (http://localhost:30000/imagedemo.wasm:wasm-function[61765]:0x13f33ed)
at invoke_vii (http://localhost:30000/imagedemo.js:14383:29)
at imagedemo.wasm.emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (qstdweb::EventListener::)(emscripten::val), void, qstdweb::EventListener, emscripten::val>::invoke(void (qstdweb::EventListener::* const&)(emscripten::val), qstdweb::EventListener*, emscripten::_EM_VAL*) (http://localhost:30000/imagedemo.wasm:wasm-function[61766]:0x13f34fe)
$emscripten_builtin_malloc @ imagedemo.wasm:0x143ef3d
$QArrayData::allocate(QArrayData**, int, int, int, QArrayData::AllocationOption) @ imagedemo.wasm:0x12d0bf2
$QList<QWindowSystemInterface::TouchPoint>::reserve(int) @ imagedemo.wasm:0x6ca6a
$ClientArea::deliverEvent(PointerEvent const&) @ imagedemo.wasm:0x6c304
$ClientArea::processPointer(PointerEvent const&) @ imagedemo.wasm:0x6b9dd
$std::_2::function::func<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0, std::_2::allocator<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0>, void (emscripten::val)>::operator()(emscripten::val&&) @ imagedemo.wasm:0x6d763
invoke_vii @ imagedemo.js:14383
$qstdweb::EventListener::handleEvent(emscripten::val) @ imagedemo.wasm:0x13f33ed
invoke_vii @ imagedemo.js:14383
$emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (qstdweb::EventListener::)(emscripten::val), void, qstdweb::EventListener, emscripten::val>::invoke(void (qstdweb::EventListener::* const&)(emscripten::val), qstdweb::EventListener*, emscripten::_EM_VAL*) @ imagedemo.wasm:0x13f34fe
dynCall @ imagedemo.js:6328
(匿名) @ imagedemo.js:6334
QtEventListener.handleEvent @ VM218:8瞭解這個錯誤
imagedemo.wasm:0x143ef3d Uncaught RuntimeError: memory access out of bounds
at imagedemo.wasm.emscripten_builtin_malloc (imagedemo.wasm:0x143ef3d)
at imagedemo.wasm.operator_new_impl(unsigned long) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.operator new(unsigned long) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QRegion::QRegion(QRect const&, QRegion::RegionType) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QWasmCompositor::deliverUpdateRequest(QWasmWindow*, QRect const&, QWasmCompositor::UpdateRequestDeliveryType) (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QWasmCompositor::deliverUpdateRequests() (http://localhost:30000/imagedemo.wasm)
at imagedemo.wasm.QWasmCompositor::requestUpdate()::$0::_invoke(double, void*) (http://localhost:30000/imagedemo.wasm)
at imagedemo.js:12609:66
$emscripten_builtin_malloc @ imagedemo.wasm:0x143ef3d
$operator_new_impl(unsigned long) @ imagedemo.wasm:0x145df05
$operator new(unsigned long) @ imagedemo.wasm:0x145dedb
$QRegion::QRegion(QRect const&, QRegion::RegionType) @ imagedemo.wasm:0x948147
$QWasmCompositor::deliverUpdateRequest(QWasmWindow*, QRect const&, QWasmCompositor::UpdateRequestDeliveryType) @ imagedemo.wasm:0x374f0
$QWasmCompositor::deliverUpdateRequests() @ imagedemo.wasm:0x37341
$QWasmCompositor::requestUpdate()::$0::_invoke(double, void*) @ imagedemo.wasm:0x37064
(匿名) @ imagedemo.js:12609
requestAnimationFrame
_emscripten_request_animation_frame @ imagedemo.js:12609
$QWasmCompositor::requestUpdateWindow(QWasmWindow*, QRect const&, QWasmCompositor::UpdateRequestDeliveryType) @ imagedemo.wasm:0x36d59
$QWasmWindow::requestActivateWindow() @ imagedemo.wasm:0x656a4
$QWindow::requestActivate() @ imagedemo.wasm:0x856f9a
$ClientArea::processPointer(PointerEvent const&) @ imagedemo.wasm:0x6b913
$std::_2::function::func<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0, std::_2::allocator<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_0>, void (emscripten::val)>::operator()(emscripten::val&&) @ imagedemo.wasm:0x6d763
invoke_vii @ imagedemo.js:14383
$qstdweb::EventListener::handleEvent(emscripten::val) @ imagedemo.wasm:0x13f33ed
invoke_vii @ imagedemo.js:14383
$emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (qstdweb::EventListener::)(emscripten::val), void, qstdweb::EventListener, emscripten::val>::invoke(void (qstdweb::EventListener::* const&)(emscripten::val), qstdweb::EventListener*, emscripten::_EM_VAL*) @ imagedemo.wasm:0x13f34fe
dynCall @ imagedemo.js:6328
(匿名) @ imagedemo.js:6334
QtEventListener.handleEvent @ VM218:8瞭解這個錯誤
imagedemo.js:14386 Uncaught RuntimeError: memory access out of bounds
at imagedemo.wasm.emscripten_builtin_malloc (http://localhost:30000/imagedemo.wasm:wasm-function[62446]:0x143ef3d)
at imagedemo.wasm.QArrayData::allocate(QArrayData**, int, int, int, QArrayData::AllocationOption) (http://localhost:30000/imagedemo.wasm:wasm-function[59665]:0x12d0bf2)
at imagedemo.wasm.QList<QWindowSystemInterface::TouchPoint>::reserve(int) (http://localhost:30000/imagedemo.wasm:wasm-function[1327]:0x6ca6a)
at imagedemo.wasm.ClientArea::deliverEvent(PointerEvent const&) (http://localhost:30000/imagedemo.wasm:wasm-function[1323]:0x6c304)
at imagedemo.wasm.ClientArea::processPointer(PointerEvent const&) (http://localhost:30000/imagedemo.wasm:wasm-function[1322]:0x6b9dd)
at imagedemo.wasm.std::_2::function::func<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_2, std::_2::allocator<ClientArea::ClientArea(QWasmWindow*, QWasmScreen*, emscripten::val)::$_2>, void (emscripten::val)>::operator()(emscripten::val&&) (http://localhost:30000/imagedemo.wasm:wasm-function[1355]:0x6da27)
at invoke_vii (http://localhost:30000/imagedemo.js:14383:29)
at imagedemo.wasm.qstdweb::EventListener::handleEvent(emscripten::val) (http://localhost:30000/imagedemo.wasm:wasm-function[61765]:0x13f33ed)
at invoke_vii (http://localhost:30000/imagedemo.js:14383:29)
at imagedemo.wasm.emscripten::internal::MethodInvoker<emscripten::internal::rvp::default_tag, void (qstdweb::EventListener::)(emscripten::val), void, qstdweb::EventListener, emscripten::val>::invoke(void (qstdweb::EventListener::* const&)(emscripten::val), qstdweb::EventListener*, emscripten::_EM_VAL*) (http://localhost:30000/imagedemo.wasm:wasm-function[61766]:0x13f34fe)