Bug 409872 - Crash when resizing two vector shapes at once.
Summary: Crash when resizing two vector shapes at once.
Status: RESOLVED FIXED
Alias: None
Product: krita
Classification: Applications
Component: General (show other bugs)
Version: unspecified
Platform: Neon Linux
: NOR crash
Target Milestone: ---
Assignee: Halla Rempt
URL:
Keywords: drkonqi
: 410428 (view as bug list)
Depends on:
Blocks:
 
Reported: 2019-07-16 20:29 UTC by wolthera
Modified: 2019-09-10 08:27 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description wolthera 2019-07-16 20:29:51 UTC
Application: krita (4.3.0-prealpha (git 9f766e7))

Qt Version: 5.12.3
Frameworks Version: 5.59.0
Operating System: Linux 4.15.0-54-generic x86_64
Distribution: KDE neon User Edition 5.16

-- Information about the crash:
- What I was doing when the application crashed:

I resized two vector shapes at once at the behest of ghevan, this leads to this crash.

The crash can be reproduced every time.

-- Backtrace:
Application: Krita (krita), signal: Segmentation fault
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[Current thread is 1 (Thread 0x7f9354bf5e80 (LWP 12972))]

Thread 9 (Thread 0x7f92dddf7700 (LWP 12319)):
#0  0x00007f9348c5bed9 in futex_reltimed_wait_cancelable (private=<optimized out>, reltime=0x7f92dddf6ba0, expected=0, futex_word=0x55914d9e0cd0) at ../sysdeps/unix/sysv/linux/futex-internal.h:142
#1  __pthread_cond_wait_common (abstime=0x7f92dddf6c60, mutex=0x55914d9e0c80, cond=0x55914d9e0ca8) at pthread_cond_wait.c:533
#2  __pthread_cond_timedwait (cond=0x55914d9e0ca8, mutex=0x55914d9e0c80, abstime=0x7f92dddf6c60) at pthread_cond_wait.c:667
#3  0x00007f934fddfd36 in QWaitCondition::wait(QMutex*, QDeadlineTimer) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f934fde0096 in QWaitCondition::wait(QMutex*, unsigned long) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f934fddd740 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f9348c556db in start_thread (arg=0x7f92dddf7700) at pthread_create.c:463
#8  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 8 (Thread 0x7f92ed01a700 (LWP 13111)):
#0  0x00007f934f4b3bf9 in __GI___poll (fds=0x7f92e0004db0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f93473585c9 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f935000edcb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f934fdd74ca in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f9348c556db in start_thread (arg=0x7f92ed01a700) at pthread_create.c:463
#8  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 7 (Thread 0x7f92ed85b700 (LWP 13102)):
#0  0x00007f934f4af0b4 in __GI___libc_read (fd=33, buf=0x7f92ed85aae0, nbytes=16) at ../sysdeps/unix/sysv/linux/read.c:27
#1  0x00007f934739d2d0 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f93473580b7 in g_main_context_check () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f9347358570 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007f935000edcb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f934fdd74ca in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007f932d53e926 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Quick.so.5
#9  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#10 0x00007f9348c556db in start_thread (arg=0x7f92ed85b700) at pthread_create.c:463
#11 0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 6 (Thread 0x7f9309c50700 (LWP 13097)):
#0  0x00007f934f4b3bf9 in __GI___poll (fds=0x7f92fc0032e0, nfds=1, timeout=-1) at ../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007f93473585c9 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f935000edcb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f934fdd74ca in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f932d079115 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5
#7  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007f9348c556db in start_thread (arg=0x7f9309c50700) at pthread_create.c:463
#9  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 5 (Thread 0x7f930944f700 (LWP 13079)):
#0  syscall () at ../sysdeps/unix/sysv/linux/x86_64/syscall.S:38
#1  0x00007f934fddb630 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#2  0x00007f934fddb4a2 in QSemaphore::tryAcquire(int, int) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007f9351e2945c in KisTileDataSwapper::waitForWork (this=0x7f93525dd620 <(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder+64>) at /home/wolthera/krita/src/libs/image/tiles3/swap/kis_tile_data_swapper.cpp:86
#4  0x00007f9351e29478 in KisTileDataSwapper::run (this=0x7f93525dd620 <(anonymous namespace)::Q_QGS_s_instance::innerFunction()::holder+64>) at /home/wolthera/krita/src/libs/image/tiles3/swap/kis_tile_data_swapper.cpp:92
#5  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f9348c556db in start_thread (arg=0x7f930944f700) at pthread_create.c:463
#7  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 4 (Thread 0x7f930c429700 (LWP 13077)):
#0  0x00007f934f4af0b4 in __GI___libc_read (fd=17, buf=0x7f930c428b50, nbytes=16) at ../sysdeps/unix/sysv/linux/read.c:27
#1  0x00007f934739d2d0 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f93473580b7 in g_main_context_check () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f9347358570 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#4  0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#5  0x00007f935000edcb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#7  0x00007f934fdd74ca in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#9  0x00007f9348c556db in start_thread (arg=0x7f930c429700) at pthread_create.c:463
#10 0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 3 (Thread 0x7f9325485700 (LWP 12986)):
#0  0x00007f934739e664 in g_mutex_unlock () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#1  0x00007f93473584ee in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#2  0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#3  0x00007f935000edcb in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#4  0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#5  0x00007f934fdd74ca in QThread::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#6  0x00007f9348e83015 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5DBus.so.5
#7  0x00007f934fdd8c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#8  0x00007f9348c556db in start_thread (arg=0x7f9325485700) at pthread_create.c:463
#9  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 2 (Thread 0x7f9338437700 (LWP 12985)):
#0  0x00007f9348c5b9f3 in futex_wait_cancelable (private=<optimized out>, expected=0, futex_word=0x55913c5a34d8) at ../sysdeps/unix/sysv/linux/futex-internal.h:88
#1  __pthread_cond_wait_common (abstime=0x0, mutex=0x55913c5a3488, cond=0x55913c5a34b0) at pthread_cond_wait.c:502
#2  __pthread_cond_wait (cond=0x55913c5a34b0, mutex=0x55913c5a3488) at pthread_cond_wait.c:655
#3  0x00007f93351db3da in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#4  0x00007f93351db107 in ?? () from /usr/lib/x86_64-linux-gnu/dri/i965_dri.so
#5  0x00007f9348c556db in start_thread (arg=0x7f9338437700) at pthread_create.c:463
#6  0x00007f934f4c088f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95

Thread 1 (Thread 0x7f9354bf5e80 (LWP 12972)):
[KCrash Handler]
#6  0x00007f934d23b7e3 in KoPathPoint::map (this=0x0, matrix=...) at /home/wolthera/krita/src/libs/flake/KoPathPoint.cpp:257
#7  0x00007f934d22f05f in KoPathShape::Private::map (this=0x55915477f0e0, matrix=...) at /home/wolthera/krita/src/libs/flake/KoPathShape.cpp:783
#8  0x00007f934d22ddef in KoPathShape::setSize (this=0x7f932800d360, newSize=...) at /home/wolthera/krita/src/libs/flake/KoPathShape.cpp:592
#9  0x00007f934d29c359 in KoParameterShape::setSize (this=0x7f932800d360, newSize=...) at /home/wolthera/krita/src/libs/flake/KoParameterShape.cpp:120
#10 0x00007f934d31d3a7 in KoShapeResizeCommand::undoImpl (this=0x5591414d8bf0) at /home/wolthera/krita/src/libs/flake/commands/KoShapeResizeCommand.cpp:90
#11 0x00007f934c5e402d in KisCommandUtils::SkipFirstRedoBase::undo (this=0x5591414d8bf0) at /home/wolthera/krita/src/libs/command/kis_command_utils.cpp:137
#12 0x00007f9312a3d914 in ShapeResizeStrategy::resizeBy (this=0x559152f9a9e0, stillPoint=..., zoomX=1.082607060496799, zoomY=1.1676307480249779) at /home/wolthera/krita/src/plugins/tools/defaulttool/defaulttool/ShapeResizeStrategy.cpp:218
#13 0x00007f9312a3d883 in ShapeResizeStrategy::handleMouseMove (this=0x559152f9a9e0, point=..., modifiers=...) at /home/wolthera/krita/src/plugins/tools/defaulttool/defaulttool/ShapeResizeStrategy.cpp:212
#14 0x00007f934d359792 in KoInteractionTool::mouseMoveEvent (this=0x55914dd649f0, event=0x7ffdcbfe62c0) at /home/wolthera/krita/src/libs/flake/tools/KoInteractionTool.cpp:72
#15 0x00007f9312a22b70 in DefaultTool::mouseMoveEvent (this=0x55914dd649f0, event=0x7ffdcbfe62c0) at /home/wolthera/krita/src/plugins/tools/defaulttool/defaulttool/DefaultTool.cpp:729
#16 0x00007f934d2b5f27 in KoToolProxy::mouseMoveEvent (this=0x55914d901100, event=0x7ffdcbfe62c0) at /home/wolthera/krita/src/libs/flake/KoToolProxy.cpp:297
#17 0x00007f934d2b5e26 in KoToolProxy::mouseMoveEvent (this=0x55914d901100, event=0x559153207e30, point=...) at /home/wolthera/krita/src/libs/flake/KoToolProxy.cpp:281
#18 0x00007f93533297d2 in KisToolProxy::forwardEvent (this=0x55914d901100, state=KisToolProxy::CONTINUE, action=KisTool::Primary, event=0x559153207e30, originalEvent=0x559153207e30) at /home/wolthera/krita/src/libs/ui/canvas/kis_tool_proxy.cpp:145
#19 0x00007f935371afc8 in KisToolInvocationAction::inputEvent (this=0x55914a933600, event=0x559153207e30) at /home/wolthera/krita/src/libs/ui/input/kis_tool_invocation_action.cpp:167
#20 0x00007f9353724c3f in KisShortcutMatcher::pointerMoved (this=0x55914a3e4540, event=0x559153207e30) at /home/wolthera/krita/src/libs/ui/input/kis_shortcut_matcher.cpp:267
#21 0x00007f935370b91c in KisInputManager::Private::handleCompressedTabletEvent (this=0x55914a3e4510, event=0x559153207e30) at /home/wolthera/krita/src/libs/ui/input/kis_input_manager_p.cpp:650
#22 0x00007f9353704d0f in KisInputManager::slotCompressedMoveEvent (this=0x55914a9508c0) at /home/wolthera/krita/src/libs/ui/input/kis_input_manager.cpp:751
#23 0x00007f93538c3926 in KisInputManager::qt_static_metacall (_o=0x55914a9508c0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7ffdcbfe6610) at /home/wolthera/krita/build/libs/ui/kritaui_autogen/RHTBEVGUKT/moc_kis_input_manager.cpp:89
#24 0x00007f934ffe1875 in QMetaObject::activate(QObject*, int, int, void**) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#25 0x00007f935174b3ef in KisSignalCompressor::timeout (this=0x55914a3e4558) at /home/wolthera/krita/build/libs/global/kritaglobal_autogen/EWIEGA46WW/moc_kis_signal_compressor.cpp:151
#26 0x00007f935172ee3d in KisSignalCompressor::tryEmitSignalSafely (this=0x55914a3e4558) at /home/wolthera/krita/src/libs/global/kis_signal_compressor.cpp:170
#27 0x00007f935172edd6 in KisSignalCompressor::tryEmitOnTick (this=0x55914a3e4558, isFromTimer=false) at /home/wolthera/krita/src/libs/global/kis_signal_compressor.cpp:152
#28 0x00007f935172ec2d in KisSignalCompressor::start (this=0x55914a3e4558) at /home/wolthera/krita/src/libs/global/kis_signal_compressor.cpp:110
#29 0x00007f93537072c1 in KisInputManager::compressMoveEventCommon<QMouseEvent> (this=0x55914a9508c0, event=0x7ffdcbfe6e00) at /home/wolthera/krita/src/libs/ui/input/kis_input_manager.cpp:269
#30 0x00007f9353703bba in KisInputManager::eventFilterImpl (this=0x55914a9508c0, event=0x7ffdcbfe6e00) at /home/wolthera/krita/src/libs/ui/input/kis_input_manager.cpp:383
#31 0x00007f93537031bc in KisInputManager::eventFilter (this=0x55914a9508c0, object=0x55914dc9cea0, event=0x7ffdcbfe6e00) at /home/wolthera/krita/src/libs/ui/input/kis_input_manager.cpp:201
#32 0x00007f934ffb1a9d in QCoreApplicationPrivate::sendThroughObjectEventFilters(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#33 0x00007f9350dad635 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#34 0x00007f9350db5a58 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#35 0x00007f93537bc5f7 in KisApplication::notify (this=0x7ffdcbfe7840, receiver=0x55914dc9cea0, event=0x7ffdcbfe6e00) at /home/wolthera/krita/src/libs/ui/KisApplication.cpp:653
#36 0x00007f934ffb1d18 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#37 0x00007f9350db405f in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool, bool) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#38 0x00007f9350e088a1 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#39 0x00007f9350e0b6fa in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#40 0x00007f9350dad65c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#41 0x00007f9350db4b90 in QApplication::notify(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5
#42 0x00007f93537bc5f7 in KisApplication::notify (this=0x7ffdcbfe7840, receiver=0x55914a9681e0, event=0x7ffdcbfe7320) at /home/wolthera/krita/src/libs/ui/KisApplication.cpp:653
#43 0x00007f934ffb1d18 in QCoreApplication::notifyInternal2(QObject*, QEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#44 0x00007f935057b1fb in QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#45 0x00007f935057c365 in QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent*) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#46 0x00007f9350554b4b in QWindowSystemInterface::sendWindowSystemEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5
#47 0x00007f933afed59a in ?? () from /usr/lib/x86_64-linux-gnu/libQt5XcbQpa.so.5
#48 0x00007f9347358417 in g_main_context_dispatch () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#49 0x00007f9347358650 in ?? () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#50 0x00007f93473586dc in g_main_context_iteration () from /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#51 0x00007f935000edaf in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#52 0x00007f934ffb003a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#53 0x00007f934ffb9170 in QCoreApplication::exec() () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#54 0x000055913a5ea0ff in main (argc=1, argv=0x7ffdcbfe79a8) at /home/wolthera/krita/src/krita/main.cc:535

Reported using DrKonqi
Comment 1 wolthera 2019-07-16 20:32:42 UTC
tusooa, boud thinks this is caused by the refactorings you did.
Comment 2 wolthera 2019-07-30 20:32:16 UTC
*** Bug 410428 has been marked as a duplicate of this bug. ***
Comment 3 Halla Rempt 2019-09-02 08:53:13 UTC
Git commit bd1b80d7d55233d09f40589bf73130991c12ddf8 by Boudewijn Rempt.
Committed on 02/09/2019 at 08:52.
Pushed by rempt into branch 'master'.

Don not crash when moving multiple vector shapes

M  +4    -1    libs/flake/KoPathShape.cpp

https://invent.kde.org/kde/krita/commit/bd1b80d7d55233d09f40589bf73130991c12ddf8
Comment 4 Halla Rempt 2019-09-10 08:27:58 UTC
Git commit 2de04845600e48fcb2b3fe3fe6f476e7359d1c03 by Boudewijn Rempt.
Committed on 10/09/2019 at 08:25.
Pushed by rempt into branch 'krita/4.2'.

Don not crash when moving multiple vector shapes

M  +4    -1    libs/flake/KoPathShape.cpp

https://invent.kde.org/kde/krita/commit/2de04845600e48fcb2b3fe3fe6f476e7359d1c03