Bug 408887 - Crash when using shrink option on the deform brush engine
Summary: Crash when using shrink option on the deform brush engine
Alias: None
Product: krita
Classification: Applications
Component: Brush engines (show other bugs)
Version: 4.2.1
Platform: Microsoft Windows Microsoft Windows
: NOR crash
Target Milestone: ---
Assignee: Halla Rempt
Keywords: regression
Depends on:
Reported: 2019-06-18 21:23 UTC by daefunct
Modified: 2019-07-08 14:59 UTC (History)
2 users (show)

See Also:
Latest Commit:
Version Fixed In:

Old deevad deform preset that causes crash (31.46 KB, image/png)
2019-06-20 16:17 UTC, Ahab Greybeard
Brush causing problems (28.99 KB, image/png)
2019-06-21 18:54 UTC, daefunct

Note You need to log in before you can comment on or make changes to this bug.
Description daefunct 2019-06-18 21:23:31 UTC
Shrinking with the deform brush engine crashes Krita

1. select a deform engine brush
2. set the mode to shrink
3. shrink something down to a small point



Windows: 10
Comment 1 Ahab Greybeard 2019-06-19 13:27:09 UTC
I can confirm this for krita 4.2.1 on Windows 10.

Using the Deevead 2a Deform brush, set to Shrink mode, a crash happens soon after operations on a layer.
If you use it in its normal (move) mode or grow mode for a while, then change it to shrink mode, it doesn't crash for a while if at all.
Selecting/deselecting various options in the brush doesn't seem to have much influence on this as far as I can tell.
Comment 2 Halla Rempt 2019-06-20 13:08:44 UTC
I cannot reproduce this on Linux. Would it be possible to get a crash log? See https://docs.krita.org/en/reference_manual/dr_minw_debugger.html#dr-minw -- preferably made with the latest nightly build (https://binary-factory.kde.org/job/Krita_Nightly_Windows_Build/)
Comment 3 Ahab Greybeard 2019-06-20 16:17:31 UTC
Created attachment 121036 [details]
Old deevad deform preset that causes crash

This has become more complicated:

I attach the old Deevad_2a_deform brush preset which will cause a crash in a 4.2.0 and later appimages when set to shrink.

When I got the freeze and Windows system reporting of krita not responding, I'd randomly choosen and used the Deevad 2a Deform brush preset, manually changing it to the shrink option. This brush preset is no longer provided in the standard bundles and was from an old bundle that I have.

Using this preset in the 4.2.1 and later Linux appimages, after setting it to shrink, causes a crash in a very short time.
The 4.1.7 appimage does not crash.

Before any further investigation:
Can the report author provide information about which brush preset was being used? If the author had created their own brush preset, can they attach it to a comment?

I tried creating a new/fresh brush preset that used the Deform engine, set to shrink, and I could not get that to crash under a variety of situations. I tried editing existing standard deform presets to shrink and could not get a crash. It only happens with the old Deevad_2a_deform preset set to shrink.

Additional note: The Deeved_2a_deform preset performs well as a shrinking brush (when it doesn't crash krita) compared to other shrinking deform presets that behave differently on a boundary with a transparent area and do in fact cause a painted area to grow. I've been unable to recreate the characteristics of the Deevad preset using the brush editor on other deform brushes in the 4.2.1 and later versions.
Comment 4 daefunct 2019-06-21 18:54:51 UTC
Created attachment 121064 [details]
Brush causing problems
Comment 5 daefunct 2019-06-21 18:56:17 UTC
I'm not seeing a recent log in kritacrash.log
I think I'm also using an old move brush. I'll attach it. Making a new brush doesn't give me any problems at all.
Comment 6 Ahab Greybeard 2019-06-21 19:23:04 UTC
Yes, that old move brush gives me a crash when edited to Shrink. I'm sure the problem will be solved eventually.

Note: For attachments of anything except image files, text files and zip files, it seems that downloading is inconvenient so I'll try to remember to zip up any future .kpp etc files.
Comment 7 Halla Rempt 2019-06-24 07:30:33 UTC

ASSERT (krita): "row < 0x7FFF && col < 0x7FFF" in file /home/boud/dev/krita/libs/image/tiles3/kis_tile_hash_table2.h, line 133

Thread 44 "Thread (pooled)" received signal SIGABRT, Aborted.
[Switching to Thread 0x7fff967fc700 (LWP 20738)]
__GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
51      ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) bt
#0  __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:51
#1  0x00007ffff295e801 in __GI_abort () at abort.c:79
#2  0x00007ffff3333f2b in QMessageLogger::fatal(char const*, ...) const ()
   from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#3  0x00007ffff4c8e91e in kis_assert_common (
    assertion=assertion@entry=0x7ffff577fee2 "row < 0x7FFF && col < 0x7FFF", 
    file=file@entry=0x7ffff577fda0 "/home/boud/dev/krita/libs/image/tiles3/kis_tile_hash_table2.h", 
    line=line@entry=133, throwException=throwException@entry=false, isIgnorable=isIgnorable@entry=false)
    at /home/boud/dev/krita/libs/global/kis_assert.cpp:90
#4  0x00007ffff4c8ea3a in kis_assert_recoverable (
    assertion=assertion@entry=0x7ffff577fee2 "row < 0x7FFF && col < 0x7FFF", 
    file=file@entry=0x7ffff577fda0 "/home/boud/dev/krita/libs/image/tiles3/kis_tile_hash_table2.h", 
    line=line@entry=133) at /home/boud/dev/krita/libs/global/kis_assert.cpp:103
#5  0x00007ffff53ab4d8 in KisTileHashTableTraits2<KisTile>::calculateHash (this=0x555561e1a320, row=-56169, 
    col=94168) at /home/boud/dev/krita/libs/image/tiles3/kis_tile_hash_table2.h:133
#6  KisTileHashTableTraits2<KisTile>::getReadOnlyTileLazy (this=0x555561e1a320, col=94168, row=-56169, 
    existingTile=@0x7fff967fac40: false) at /home/boud/dev/krita/libs/image/tiles3/kis_tile_hash_table2.h:375
#7  0x00007ffff53c1735 in KisTiledDataManager::getTile (writable=<optimized out>, row=-56169, col=94168, 
    this=0x555561d2eee0) at /home/boud/dev/krita/libs/image/tiles3/kis_tiled_data_manager.h:128
#8  KisTiledDataManager::getTilesPair (oldTile=0x7fff8800ebf8, tile=0x7fff8800ebf0, writable=<optimized out>, 
    row=-56169, col=94168, this=0x555561d2eee0)
    at /home/boud/dev/krita/libs/image/tiles3/kis_tiled_data_manager.h:107
#9  KisRandomAccessor2::fetchTileData (this=this@entry=0x7fff8800ce50, col=94168, row=-56169)
    at /home/boud/dev/krita/libs/image/tiles3/kis_random_accessor.cc:122
#10 0x00007ffff53c2002 in KisRandomAccessor2::moveTo (this=0x7fff8800ce50, x=6026780, y=-3594768)
    at /home/boud/dev/krita/libs/image/tiles3/kis_random_accessor.cc:89
#11 0x00007ffff566cb08 in KisRandomSubAccessor::sampledRawData (this=this@entry=0x7fff8800e1d0, 
    dst=dst@entry=0x7fff88003a90 "") at /home/boud/dev/krita/libs/image/kis_random_sub_accessor.cpp:80
#12 0x00007fffb80a9bb2 in PickerTraitReal::sampleData<false> (data=0x7fff88003a90 "", accessor=...)
    at /home/boud/dev/krita/libs/image/kis_cross_device_color_picker.h:38
#13 KisCrossDeviceColorPickerImpl<PickerTraitReal>::pickColorImpl<false> (dst=0x7fff8801eef0 "", 
    y=<optimized out>, x=<optimized out>, this=<synthetic pointer>)
    at /home/boud/dev/krita/libs/image/kis_cross_device_color_picker.h:121
#14 KisCrossDeviceColorPickerImpl<PickerTraitReal>::pickColor (dst=0x7fff8801eef0 "", y=<optimized out>, 
    x=<optimized out>, this=<synthetic pointer>)
    at /home/boud/dev/krita/libs/image/kis_cross_device_color_picker.h:96
#15 DeformBrush::paintMask (this=this@entry=0x7fff7c00a2a0, dab=..., layer=..., scale=scale@entry=1, 
    rotation=rotation@entry=0, pos=..., subPixelX=subPixelX@entry=0.2228398328768435, 
    subPixelY=subPixelY@entry=0.34434506453101221, dabX=dabX@entry=504, dabY=dabY@entry=297)
    at /home/boud/dev/krita/plugins/paintops/deform/deform_brush.cpp:250
#16 0x00007fffb80ae4b6 in KisDeformPaintOp::paintAt (this=0x7fff7c00a270, info=...)
    at /home/boud/dev/krita/plugins/paintops/deform/kis_deform_paintop.cpp:134
#17 0x00007ffff53fc241 in KisPaintInformation::paintAt<KisPaintOp> (distanceInfo=0x5555621a4020, op=..., 
    this=0x7fff967fb710) at /home/boud/dev/krita/libs/image/brushengine/kis_paint_information.h:117
#18 KisPaintOpUtils::paintLine<KisPaintOp> (op=..., pi1=..., pi2=..., 
    currentDistance=currentDistance@entry=0x5555621a4020, fanCornersEnabled=false, fanCornersStep=1)
    at /home/boud/dev/krita/libs/image/brushengine/kis_paintop_utils.h:96
#19 0x00007ffff53fbafd in KisPaintOp::paintLine (currentDistance=0x5555621a4020, pi2=..., pi1=..., 
    this=0x7fff7c00a270) at /home/boud/dev/krita/libs/image/brushengine/kis_paintop.cc:156
#20 paintBezierCurve (paintOp=0x7fff7c00a270, pi1=..., control1=..., control2=..., pi2=..., 
    currentDistance=0x5555621a4020) at /home/boud/dev/krita/libs/image/brushengine/kis_paintop.cc:125
#21 0x00007ffff53fbc82 in KisPaintOp::paintBezierCurve (this=<optimized out>, pi1=..., control1=..., 
    control2=..., pi2=..., currentDistance=<optimized out>)
    at /home/boud/dev/krita/libs/image/brushengine/kis_paintop.cc:148
#22 0x00007ffff6ae9a27 in KisMaskedFreehandStrokePainter::<lambda(KisFreehandStrokeInfo*)>::operator() (
    data=<optimized out>, data=<optimized out>, __closure=<synthetic pointer>)
---Type <return> to continue, or q <return> to quit---
    at /home/boud/dev/krita/libs/ui/tool/strokes/KisMaskedFreehandStrokePainter.cpp:67
#23 KisMaskedFreehandStrokePainter::applyToAllPainters<KisMaskedFreehandStrokePainter::paintBezierCurve(const KisPaintInformation&, const QPointF&, const QPointF&, const KisPaintInformation&)::<lambda(KisFreehandStrokeInfo*)> >
    (func=..., this=0x7fff7c009580, this@entry=0x555561c70498)
    at /home/boud/dev/krita/libs/ui/tool/strokes/KisMaskedFreehandStrokePainter.cpp:43
#24 KisMaskedFreehandStrokePainter::paintBezierCurve (this=this@entry=0x7fff7c009580, pi1=..., control1=..., 
    control2=..., pi2=...) at /home/boud/dev/krita/libs/ui/tool/strokes/KisMaskedFreehandStrokePainter.cpp:66
#25 0x00007ffff6ad9cd8 in FreehandStrokeStrategy::doStrokeCallback (this=0x555560d27c00, data=<optimized out>)
    at /home/boud/dev/krita/libs/ui/tool/strokes/freehand_stroke.cpp:179
#26 0x00007ffff577d340 in non-virtual thunk to KisUpdateJobItem::run() ()
   from /home/boud/dev/i-krita/lib/x86_64-linux-gnu/libkritaimage.so.19
#27 0x00007ffff335c3e2 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#28 0x00007ffff3357c72 in ?? () from /usr/lib/x86_64-linux-gnu/libQt5Core.so.5
#29 0x00007fffec4f36db in start_thread (arg=0x7fff967fc700) at pthread_create.c:463
#30 0x00007ffff2a3f88f in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:95
Comment 8 Halla Rempt 2019-06-24 07:38:50 UTC
Git commit 103d4b79dac9e4fb38ed4e9acb0c66b4343ed00d by Boudewijn Rempt.
Committed on 24/06/2019 at 07:38.
Pushed by rempt into branch 'master'.

Use a safe assert here

M  +1    -1    libs/image/tiles3/kis_tile_hash_table2.h

Comment 9 Halla Rempt 2019-06-24 08:21:45 UTC
Git commit 9be2cc9263e8d9d365ef5d8884aec93521736244 by Boudewijn Rempt.
Committed on 24/06/2019 at 08:21.
Pushed by rempt into branch 'krita/4.2'.

Use a safe assert here

M  +1    -1    libs/image/tiles3/kis_tile_hash_table2.h

Comment 10 Halla Rempt 2019-06-24 10:45:26 UTC
Before the transform call:

maskX: -27.2759 
maskY: -31.4891 
distance: 0.173553


maskX: 6.5584e+07 
maskY: 7.57144e+07
Comment 11 Dmitry Kazakov 2019-06-24 12:31:17 UTC
Git commit 7b0d5683c6cad0ff294848d579bd98761071f385 by Dmitry Kazakov.
Committed on 24/06/2019 at 12:29.
Pushed by dkazakov into branch 'master'.

Fix a crash when using "shrink" deform brush

M  +2    -1    plugins/paintops/deform/deform_brush.h

Comment 12 Halla Rempt 2019-07-08 14:59:27 UTC
Git commit 7319fd1b2bbe74b8ef22cc198143ebb4e859eb6f by Boudewijn Rempt, on behalf of Dmitry Kazakov.
Committed on 08/07/2019 at 14:59.
Pushed by rempt into branch 'krita/4.2'.

Fix a crash when using "shrink" deform brush

M  +2    -1    plugins/paintops/deform/deform_brush.h