SUMMARY Safe assert occured when I tried to add a filter as a mask to a layer. If you ignore the safe assert, it will appear again and again and then Krita will crash. STEPS TO REPRODUCE 1. Open the test file provided. 2. Go to "Filter -> Adjust -> Color Adjustment Curves" 3. Press "Create Filter Mask" OBSERVED RESULT 4. Safe assert: m_image KisImage(0x555557075540, name = "OpenRaster Image (name)") QPaintDevice: Cannot destroy paint device that is being painted SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 5. If you ignore the safe assert in the dev build, you'll get it a few more times, and then eventually a crash: Thread 1 "krita" received signal SIGSEGV, Segmentation fault. 0x00007ffff6211a26 in QPlatformPixmap::mask() const () from /lib/x86_64-linux-gnu/libQt5Gui.so.5 EXPECTED RESULT No safe assert. No crash after ignoring safe asserts. SOFTWARE/OS VERSIONS Krita Version: 5.2.0-prealpha (git e13edec3dc) Hidpi: true Qt Version (compiled): 5.12.8 Version (loaded): 5.12.8 OS Information Build ABI: x86_64-little_endian-lp64 Build CPU: x86_64 CPU: x86_64 Kernel Type: linux Kernel Version: 5.13.0-35-generic Pretty Productname: Linux Mint 20.3 Product Type: linuxmint Product Version: 20.3 Desktop: X-Cinnamon SAFE ASSERT LOG (shortened): m_image KisImage(0x555557075540, name = "OpenRaster Image (name)") QPaintDevice: Cannot destroy paint device that is being painted SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 Thread 1 "krita" received signal SIGABRT, Aborted. __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 50 ../sysdeps/unix/sysv/linux/raise.c: Nie ma takiego pliku ani katalogu. (gdb) bt #0 __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:50 #1 0x00007ffff5748859 in __GI_abort () at abort.c:79 #2 0x00007ffff5b9caad in () at /lib/x86_64-linux-gnu/libQt5Core.so.5 #3 0x00007ffff6d5bf64 in kis_assert_common(char const*, char const*, int, bool, bool) (assertion=<optimized out>, file=<optimized out>, line=<optimized out>, throwException=<optimized out>, isIgnorable=<optimized out>) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qarraydata.h:208 #4 0x00007ffff70d4eb8 in KisTileHashTableTraits2<KisTile>::calculateHashSafe(int, int) (col=-16777216, row=-16777216, this=<optimized out>) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h:149 #5 KisTileHashTableTraits2<KisTile>::calculateHashSafe(int, int) (this=0x555558cf6ea0, row=-16777216, col=-16777216) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h:149 #6 KisTileHashTableTraits2<KisTile>::getReadOnlyTileLazy(int, int, bool&) (this=0x555558cf6ea0, col=col@entry=-16777216, row=row@entry=-16777216, existingTile=@0x7fffffffb940: 32) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h:406 #7 0x00007ffff70eb0e1 in KisTiledDataManager::getTile(int, int, bool) (writable=<optimized out>, row=-16777216, col=-16777216, this=0x55555e2d7ca0) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_tiled_data_manager.h:116 #8 KisTiledDataManager::getTilesPair(int, int, bool, KisSharedPtr<KisTile>*, KisSharedPtr<KisTile>*) (oldTile=0x555563893ed8, tile=0x555563893ed0, writable=<optimized out>, row=-16777216, col=-16777216, this=0x55555e2d7ca0) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_tiled_data_manager.h:95 #9 KisRandomAccessor2::fetchTileData(int, int) (this=0x555565f4b9f0, col=-16777216, row=-16777216) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_random_accessor.cc:113 #10 0x00007ffff70eb486 in KisRandomAccessor2::moveTo(int, int) (this=0x555565f4b9f0, x=-1073741824, y=-1073741824) at /home/tymon/kritadev/krita/libs/image/tiles3/kis_random_accessor.cc:80 #11 0x00007ffff72d9a5f in createThumbnailDeviceInternal(KisPaintDevice const*, qint32, qint32, qint32, qint32, qint32, qint32, QRect) (srcDev=<optimized out>, srcX0=-1073741824, srcY0=-1073741824, srcWidth=2147483647, srcHeight=2147483647, w=62, h=62, outputRect=...) at /home/tymon/kritadev/krita/libs/image/kis_paint_device.cc:1714 CRASH LOG (shortened): m_image KisImage(0x55555938ebc0, name = "OpenRaster Image (name)") SAFE ASSERT (krita): "dst->lodData->levelOfDetail() == defaultBounds->currentLevelOfDetail()" in file /home/tymon/kritadev/krita/libs/image/kis_paint_device.cc, line 852 SAFE ASSERT (krita): "dst->lodData->levelOfDetail() == defaultBounds->currentLevelOfDetail()" in file /home/tymon/kritadev/krita/libs/image/kis_paint_device.cc, line 852 QPaintDevice: Cannot destroy paint device that is being painted SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 SAFE ASSERT (krita): "qAbs(row) < 0x7FFF && qAbs(col) < 0x7FFF" in file /home/tymon/kritadev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 151 Thread 1 "krita" received signal SIGSEGV, Segmentation fault. 0x00007ffff6211a26 in QPlatformPixmap::mask() const () from /lib/x86_64-linux-gnu/libQt5Gui.so.5 (gdb) bt #0 0x00007ffff6211a26 in QPlatformPixmap::mask() const () at /lib/x86_64-linux-gnu/libQt5Gui.so.5 #1 0x00007ffff6414c0a in QPainter::setBrushOrigin(QPointF const&) () at /lib/x86_64-linux-gnu/libQt5Gui.so.5 #2 0x00007fffd1ed62f5 in QPainter::setBrushOrigin(QPoint const&) (p=<synthetic pointer>..., this=0x7fffffffc6b8) at /usr/include/x86_64-linux-gnu/qt5/QtCore/qpoint.h:131 #3 NodeDelegate::drawThumbnail(QPainter*, QStyleOptionViewItem const&, QModelIndex const&) const (this=0x55555a3d6ad0, p=0x7fffffffc6b8, option=..., index=...) at /home/tymon/kritadev/krita/plugins/dockers/layerdocker/NodeDelegate.cpp:307 #4 0x00007fffd1eddfc3 in NodeDelegate::paint(QPainter*, QStyleOptionViewItem const&, QModelIndex const&) const (this=0x55555a3d6ad0, p=0x7fffffffc6b8, o=..., index=...) at /home/tymon/kritadev/krita/plugins/dockers/layerdocker/NodeDelegate.cpp:134 #5 0x00007ffff6a8d56a in QTreeView::drawRow(QPainter*, QStyleOptionViewItem const&, QModelIndex const&) const () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5 #6 0x00007ffff6a92a83 in QTreeView::drawTree(QPainter*, QRegion const&) const () at /lib/x86_64-linux-gnu/libQt5Widgets.so.5
Created attachment 151199 [details] Test file
Created attachment 151200 [details] Safe assert log
Created attachment 151201 [details] Crash log file
Git commit 547880fd83246c345942966134d237f4b76e28a2 by Dmitry Kazakov. Committed on 12/08/2022 at 10:12. Pushed by dkazakov into branch 'master'. Fix a crash when opening an ORA file One paint device cannot belong to two different images. When one of the images is destroyed, the default bounds link of the paint device is destroyed. M +1 -1 plugins/impex/ora/kis_open_raster_stack_load_visitor.cpp https://invent.kde.org/graphics/krita/commit/547880fd83246c345942966134d237f4b76e28a2
Git commit 8525135cbab7f21048ca54f43cf2e745a013944a by Dmitry Kazakov. Committed on 12/08/2022 at 10:12. Pushed by dkazakov into branch 'krita/5.1'. Fix a crash when opening an ORA file One paint device cannot belong to two different images. When one of the images is destroyed, the default bounds link of the paint device is destroyed. M +1 -1 plugins/impex/ora/kis_open_raster_stack_load_visitor.cpp https://invent.kde.org/graphics/krita/commit/8525135cbab7f21048ca54f43cf2e745a013944a
Git commit 8187126ec1e1076bd3dbe6eb31678da41f881661 by Dmitry Kazakov. Committed on 12/08/2022 at 11:00. Pushed by dkazakov into branch 'master'. Add a sanity check that verifies that a paint device belongs only to one layer M +1 -0 libs/image/kis_paint_device.cc M +7 -13 libs/image/kis_paint_layer.cc M +0 -2 libs/image/kis_paint_layer.h https://invent.kde.org/graphics/krita/commit/8187126ec1e1076bd3dbe6eb31678da41f881661