Bug 395000 - Crash when adding Filter Mask node using addChildNode() in Python
Summary: Crash when adding Filter Mask node using addChildNode() in Python
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: Scripting (show other bugs)
Version: 4.0.3
Platform: Appimage Linux
: NOR crash
Target Milestone: ---
Assignee: Victor Wåhlström
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-06-03 18:18 UTC by SirPigeonz
Modified: 2019-05-09 11:38 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments
Crashing Script (292 bytes, text/x-python)
2018-06-03 18:18 UTC, SirPigeonz
Details

Note You need to log in before you can comment on or make changes to this bug.
Description SirPigeonz 2018-06-03 18:18:17 UTC
Created attachment 113045 [details]
Crashing Script

Attaching Mask Node to Layer Node in Python crashes Krita.

Run code from Attachement in Scripter.

When using addChildNode() to attach Layer Node to other Layer Node it works as expected.
Comment 1 Antti Savolainen 2018-06-03 22:32:08 UTC
Confirming this.

Build Date & Platform:

    krita 4.1.0-pre-alpha (Built on 4.6.2018)
    Xubuntu 17.10
    Krita Lime https://launchpad.net/~kritalime/+archive/ubuntu/ppa

Quit
(gdb) bt
#0  0x00007ffff22cc640 in KisSelection::pixelSelection() const (this=0x0) at ./libs/image/kis_selection.cc:178
#1  0x00007ffff2239d4d in KisMask::paintDevice() const (this=0x55555e596480) at ./libs/image/kis_mask.cc:194
#2  0x00007fffb9dac07c in KisColorSelectorContainer::reactOnLayerChange() (this=0x5555605c2480) at ./plugins/dockers/advancedcolorselector/kis_color_selector_container.cpp:179
#3  0x00007fffb9dbfea2 in KisColorSelectorContainer::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x5555605c2480, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffb930)
    at ./obj-x86_64-linux-gnu/plugins/dockers/advancedcolorselector/kritacolorselectorng_autogen/EWIEGA46WW/moc_kis_color_selector_container.cpp:93
#4  0x00007ffff50f28e5 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007ffff77b6908 in KisNodeManager::sigLayerActivated(KisSharedPtr<KisLayer>) (this=0x55555efe7688, _t1=...) at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/EWIEGA46WW/moc_kis_node_manager.cpp:454
#6  0x00007ffff77b5ace in KisNodeManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x55555efe7688, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7fffffffbb10)
    at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/EWIEGA46WW/moc_kis_node_manager.cpp:312
#7  0x00007ffff50f28e5 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007ffff77b4f5c in KisLayerManager::sigLayerActivated(KisSharedPtr<KisLayer>) (this=0x55555eebeca0, _t1=...) at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/EWIEGA46WW/moc_kis_layer_manager.cpp:327
#9  0x00007ffff73c0c6e in KisLayerManager::activateLayer(KisSharedPtr<KisLayer>) (this=0x55555eebeca0, layer=...) at ./libs/ui/kis_layer_manager.cc:153
#10 0x00007ffff73da277 in KisNodeManager::Private::activateNodeImpl(KisSharedPtr<KisNode>) (this=0x55555eebec80, node=...) at ./libs/ui/kis_node_manager.cpp:182
#11 0x00007ffff73df4a6 in KisNodeManager::slotSomethingActivatedNodeImpl(KisSharedPtr<KisNode>) (this=0x55555efe7688, node=...) at ./libs/ui/kis_node_manager.cpp:610
#12 0x00007ffff73df7ac in KisNodeManager::slotNonUiActivatedNode(KisSharedPtr<KisNode>) (this=0x55555efe7688, node=...) at ./libs/ui/kis_node_manager.cpp:626
#13 0x00007ffff77b5b72 in KisNodeManager::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x55555efe7688, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffbe70)
    at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/EWIEGA46WW/moc_kis_node_manager.cpp:315
#14 0x00007ffff50f28e5 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#15 0x00007ffff77ac288 in KisDummiesFacadeBase::sigActivateNode(KisSharedPtr<KisNode>) (this=0x555560a793d0, _t1=...) at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/QUY67KCZCL/moc_kis_dummies_facade_base.cpp:301
#16 0x00007ffff73424b8 in KisDummiesFacadeBase::slotNodeActivationRequested(KisSharedPtr<KisNode>) (this=0x555560a793d0, node=...) at ./libs/ui/flake/kis_dummies_facade_base.cpp:108
#17 0x00007ffff77ab874 in KisDummiesFacadeBase::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x555560a793d0, _c=QMetaObject::InvokeMetaMethod, _id=10, _a=0x7fffffffc0d0)
    at ./obj-x86_64-linux-gnu/libs/ui/kritaui_autogen/QUY67KCZCL/moc_kis_dummies_facade_base.cpp:144
#18 0x00007ffff50f28e5 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#19 0x00007ffff23958a2 in KisImage::sigNodeAddedAsync(KisSharedPtr<KisNode>) (this=0x555560b61550, _t1=...) at ./obj-x86_64-linux-gnu/libs/image/kritaimage_autogen/EWIEGA46WW/moc_kis_image.cpp:690
#20 0x00007ffff2393e38 in KisImage::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x555560b61550, _c=QMetaObject::InvokeMetaMethod, _id=9, _a=0x7fffffffc3a0) at ./obj-x86_64-linux-gnu/libs/image/kritaimage_autogen/EWIEGA46WW/moc_kis_image.cpp:305
#21 0x00007ffff50f28e5 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#22 0x00007ffff2397110 in KisImageSignalRouter::sigNodeAddedAsync(KisSharedPtr<KisNode>) (this=0x7fffd8008da0, _t1=...) at ./obj-x86_64-linux-gnu/libs/image/kritaimage_autogen/EWIEGA46WW/moc_kis_image_signal_router.cpp:325
#23 0x00007ffff2203677 in KisImageSignalRouter::emitNodeHasBeenAdded(KisNode*, int) (this=0x7fffd8008da0, parent=0x555560b6e190, index=0) at ./libs/image/kis_image_signal_router.cpp:99
#24 0x00007ffff21f00ba in KisImage::nodeHasBeenAdded(KisNode*, int) (this=0x555560b61550, parent=0x555560b6e190, index=0) at ./libs/image/kis_image.cc:345
#25 0x00007ffff226a763 in KisNode::add(KisSharedPtr<KisNode>, KisSharedPtr<KisNode>) (this=0x555560b6e190, newNode=..., aboveThis=...) at ./libs/image/kis_node.cpp:511
#26 0x00007ffff2270118 in KisNodeFacade::addNode(KisSharedPtr<KisNode>, KisSharedPtr<KisNode>, unsigned int) (this=0x555560b61580, node=..., parent=..., index=0) at ./libs/image/kis_node_facade.cpp:130
#27 0x00007fffad4da0eb in Node::addChildNode(Node*, Node*) (this=0x555560c62d30, child=0x555560c82430, above=0x0) at ./libs/libkis/Node.cpp:179
#28 0x00007fffacd22dae in meth_Node_addChildNode(PyObject*, PyObject*) (sipSelf=0x7fffa36a7b88, sipArgs=0x7fffa99a8688) at ./obj-x86_64-linux-gnu/plugins/extensions/pykrita/sip/./krita/sipkritapart0.cpp:16942
#29 0x00007fffad81b53d in _PyCFunction_FastCallDict () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#30 0x00007fffad8a9e9f in  () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#31 0x00007fffad8aef41 in _PyEval_EvalFrameDefault () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#32 0x00007fffad8a9a9a in  () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#33 0x00007fffad8aa0fe in PyEval_EvalCodeEx () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#34 0x00007fffad8aa12b in PyEval_EvalCode () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#35 0x00007fffad8a6fed in  () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#36 0x00007fffad81b53d in _PyCFunction_FastCallDict () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#37 0x00007fffad8a9e9f in  () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#38 0x00007fffad8aef41 in _PyEval_EvalFrameDefault () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#39 0x00007fffad8b27b7 in _PyFunction_FastCallDict () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#40 0x00007fffad7b12ce in _PyObject_FastCallDict () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#41 0x00007fffad7b13cc in _PyObject_Call_Prepend () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#42 0x00007fffad7b1098 in PyObject_Call () at /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0
#43 0x00007fffac9fadac in  () at /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-36m-x86_64-linux-gnu.so
#44 0x00007fffac9fb110 in  () at /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-36m-x86_64-linux-gnu.so
#45 0x00007fffac9f5030 in  () at /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-36m-x86_64-linux-gnu.so
#46 0x00007fffac9f5997 in  () at /usr/lib/python3/dist-packages/PyQt5/QtCore.cpython-36m-x86_64-linux-gnu.so
#47 0x00007ffff50f29a9 in QMetaObject::activate(QObject*, int, int, void**) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#48 0x00007ffff5e37d82 in QAction::triggered(bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#49 0x00007ffff5e3a46c in QAction::activate(QAction::ActionEvent) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#50 0x00007ffff5ffbafb in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#51 0x00007ffff5ffbd54 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#52 0x00007ffff5fdb08a in QToolButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#53 0x00007ffff5e7edc8 in QWidget::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#54 0x00007ffff5fdb124 in QToolButton::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#55 0x00007ffff5e3e46c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#56 0x00007ffff5e4628f in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#57 0x00007ffff76aa4f5 in KisApplication::notify(QObject*, QEvent*) (this=0x7fffffffde60, receiver=0x555560a8c8a0, event=0x7fffffffd520) at ./libs/ui/KisApplication.cpp:652
#58 0x00007ffff50c3de8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#59 0x00007ffff5e45262 in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#60 0x00007ffff5e9994b in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
---Type <return> to continue, or q <return> to quit---
#61 0x00007ffff5e9bfba in  () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#62 0x00007ffff5e3e46c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#63 0x00007ffff5e45d34 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#64 0x00007ffff76aa4f5 in KisApplication::notify(QObject*, QEvent*) (this=0x7fffffffde60, receiver=0x55555644a300, event=0x7fffffffd9b0) at ./libs/ui/KisApplication.cpp:652
#65 0x00007ffff50c3de8 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#66 0x00007ffff5682f43 in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#67 0x00007ffff5684a25 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () at /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#68 0x00007ffff565ccab in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#69 0x00007fffe264d5a0 in  () at /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#70 0x00007fffec78ffb7 in g_main_context_dispatch () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#71 0x00007fffec7901f0 in  () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#72 0x00007fffec79027c in g_main_context_iteration () at /lib/x86_64-linux-gnu/libglib-2.0.so.0
#73 0x00007ffff511c47f in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#74 0x00007ffff50c1e3a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#75 0x00007ffff50cada4 in QCoreApplication::exec() () at /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#76 0x0000555555849493 in main(int, char**) (argc=1, argv=0x7fffffffdfe8) at ./krita/main.cc:361
Comment 2 Victor Wåhlström 2019-05-09 11:31:40 UTC
Git commit a9b68dbb910e2053a3329e6839b6dc8e0bf1e62e by Victor Wåhlström.
Committed on 09/05/2019 at 11:31.
Pushed by victorw into branch 'master'.

Change Document::createFilterMask API to require either a Selection or a Node from which to initialize the selection with.

This prevents a crash that would occur when parenting a FilterMask without a selection to a node.

M  +32   -4    libs/libkis/Document.cpp
M  +12   -1    libs/libkis/Document.h
M  +2    -1    plugins/extensions/pykrita/sip/krita/Document.sip

https://invent.kde.org/kde/krita/commit/a9b68dbb910e2053a3329e6839b6dc8e0bf1e62e
Comment 3 Victor Wåhlström 2019-05-09 11:38:10 UTC
The API has been updated and now requires passing in a selection or a node when calling createFilterMask. Typically that would be the node you intend to parent the filter mask to.

In your example you would change

fm = d.createFilterMask("SHS[Blacken]", filter)

to

fm = d.createFilterMask("SHS[Blacken]", filter, n)