Bug 445285

Summary: krita segfaults on start after displaying the splash screen when a whole log of packages are disabled - part2
Product: [Applications] krita Reporter: Timo Gurr <timo.gurr>
Component: GeneralAssignee: Krita Bugs <krita-bugs-null>
Status: RESOLVED FIXED    
Severity: normal CC: halla
Priority: NOR    
Version First Reported In: 4.4.8   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:
Attachments: coredump.txt

Description Timo Gurr 2021-11-10 16:29:38 UTC
Created attachment 143414 [details]
coredump.txt

SUMMARY
Krita crashes right on start just after displaying the splash screen.

Followup of https://bugs.kde.org/show_bug.cgi?id=445276 now with additional enabled options OpenColorIO/OCIO, OpenEXR and Python I run into another segfault.

STEPS TO REPRODUCE
1.  Compile Krita 4.4.8
2.  Try to run it

OBSERVED RESULT
Segfault

EXPECTED RESULT
No segfault

SOFTWARE/OS VERSIONS
Operating System: Exherbo
KDE Plasma Version: 5.23.2
KDE Frameworks Version: 5.87.0
Qt Version: 5.15.2 (qtbase kde/5.15 branch fixes up to 5.15.2_p254)
Kernel Version: 5.15.1 (64-bit)
Graphics Platform: X11
Processors: 4 × Intel® Core™ i5-6500 CPU @ 3.20GHz
Memory: 11.5 GiB of RAM
Graphics Processor: Mesa Intel® HD Graphics 530

ADDITIONAL INFORMATION
Used CMake options during build:

cmake -DCMAKE_COLOR_MAKEFILE:BOOL=TRUE -DCMAKE_VERBOSE_MAKEFILE:BOOL=TRUE -DCMAKE_BUILD_TYPE:STRING=None -DCMAKE_C_FLAGS:STRING=-march=native -O2 -pipe -DCMAKE_CXX_FLAGS:STRING=-march=native -O2 -pipe -DCMAKE_AR:PATH=x86_64-pc-linux-gnu-ar -DCMAKE_RANLIB:PATH=x86_64-pc-linux-gnu-ranlib -DCMAKE_NM:PATH=x86_64-pc-linux-gnu-nm -DCMAKE_C_COMPILER:PATH=x86_64-pc-linux-gnu-cc -DCMAKE_CXX_COMPILER:PATH=x86_64-pc-linux-gnu-c++ -DCMAKE_INSTALL_PREFIX:PATH=/usr/x86_64-pc-linux-gnu -DCMAKE_FIND_ROOT_PATH=/usr/x86_64-pc-linux-gnu -DCMAKE_FIND_ROOT_PATH_MODE_PROGRAM:STRING=NEVER -DCMAKE_SYSTEM_PREFIX_PATH:PATH=/usr/x86_64-pc-linux-gnu -DCMAKE_INSTALL_LIBDIR:STRING=lib -DCMAKE_INSTALL_DATAROOTDIR:PATH=/usr/share/ -DBUILD_COVERAGE:BOOL=FALSE -DBUILD_KRITA_QT_DESIGNER_PLUGINS:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_KSeExpr:BOOL=TRUE -DCRASH_ON_SAFE_ASSERTS:BOOL=FALSE -DENABLE_CPU_THROTTLE:BOOL=FALSE -DHAVE_BACKTRACE_SUPPORT:BOOL=FALSE -DHAVE_MEMORY_LEAK_TRACKER:BOOL=FALSE -DHIDE_SAFE_ASSERTS:BOOL=TRUE -DKRITA_ENABLE_BROKEN_TESTS:BOOL=FALSE -DLIMIT_LONG_TESTS:BOOL=TRUE -DSHARED_LIBS:BOOL=TRUE -DUSE_LOCK_FREE_HASH_TABLE:BOOL=TRUE -DFOUNDATION_BUILD:BOOL=FALSE -DENABLE_PYTHON_2:BOOL=FALSE -DKRITA_DEVS:BOOL=FALSE -DBUILD_SHARED_LIBS:BOOL=TRUE -DKDE_INSTALL_AUTOSTARTDIR=/etc/xdg/autostart -DKDE_INSTALL_CONFDIR=/etc/xdg -DKDE_INSTALL_DATAROOTDIR:PATH=/usr/share -DKDE_INSTALL_LIBEXECDIR=libexec -DKDE_INSTALL_SYSCONFDIR=/etc -DKDE_INSTALL_USE_QT_SYS_PATHS:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_FFTW3:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_OpenColorIO:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_HEIF:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_OpenJPEG:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_OpenEXR:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_Poppler:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_PythonInterp:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_PythonLibrary:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_SIP:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_PyQt5:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_LibRaw:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_Qt5Multimedia:BOOL=TRUE -DCMAKE_DISABLE_FIND_PACKAGE_TIFF:BOOL=FALSE -DCMAKE_DISABLE_FIND_PACKAGE_Vc:BOOL=TRUE -DBUILD_TESTING:BOOL=FALSE /var/tmp/paludis/build/media-gfx-krita-4.4.8/work/krita-4.4.8

Attached you'll find, the hopefully useful, coredump.

Application: krita (krita), signal: Segmentation fault

Kcrash Handler Output Krita 4.4.8:
[KCrash Handler]
#4  0x00007f5a0d3d7dd5 in KisSmallColorWidget::Private::generationColorSpace() () from /usr/x86_64-pc-linux-gnu/lib/kritaplugins/kritasmallcolorselector.so
#5  0x00007f5a0d3d4ed0 in void KisSmallColorWidget::uploadPaletteData<(anonymous namespace)::FillHPolicy>(KisGLImageWidget*, QSize const&) () from /usr/x86_64-pc-linux-gnu/lib/kritaplugins/kritasmallcolorselector.so
#6  0x00007f5a0d3d6699 in KisSmallColorWidget::KisSmallColorWidget(QWidget*) () from /usr/x86_64-pc-linux-gnu/lib/kritaplugins/kritasmallcolorselector.so
#7  0x00007f5a0d3d4223 in SmallColorSelectorDock::SmallColorSelectorDock() () from /usr/x86_64-pc-linux-gnu/lib/kritaplugins/kritasmallcolorselector.so
#8  0x00007f5a0d3d3821 in SmallColorSelectorDockFactory::createDockWidget() () from /usr/x86_64-pc-linux-gnu/lib/kritaplugins/kritasmallcolorselector.so
#9  0x00007f5a25d54e8e in KisMainWindow::createDockWidget(KoDockFactoryBase*) () from /usr/x86_64-pc-linux-gnu/lib/libkritaui.so.20
#10 0x00007f5a25d5dd7b in KisMainWindow::KisMainWindow(QUuid) () from /usr/x86_64-pc-linux-gnu/lib/libkritaui.so.20
#11 0x00007f5a25d68f37 in KisPart::createMainWindow(QUuid) () from /usr/x86_64-pc-linux-gnu/lib/libkritaui.so.20
#12 0x00007f5a25d698ba in KisPart::startBlankSession() () from /usr/x86_64-pc-linux-gnu/lib/libkritaui.so.20
#13 0x00007f5a25d2528f in KisApplication::start(KisApplicationArguments const&) () from /usr/x86_64-pc-linux-gnu/lib/libkritaui.so.20
#14 0x00005609c80fda1b in main ()
[Inferior 1 (process 30529) detached]
Comment 1 Halla Rempt 2021-11-11 09:43:33 UTC
Please try this:

diff --git a/plugins/dockers/smallcolorselector/kis_small_color_widget.cc b/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
index 99106fa1c1..4b23367cb6 100644
--- a/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
+++ b/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
@@ -72,8 +72,11 @@ struct KisSmallColorWidget::Private {
         }
 
         // PQ color space we deliniearize into linear one
-        if (result && result->colorModelId() == RGBAColorModelID &&
-            result->profile()->uniqueId() == KoColorSpaceRegistry::instance()->p2020PQProfile()->uniqueId()) {
+        if (result
+                && result->colorModelId() == RGBAColorModelID
+                && result->profile()
+                && KoColorSpaceRegistry::instance()->p2020PQProfile()
+                && result->profile()->uniqueId() == KoColorSpaceRegistry::instance()->p2020PQProfile()->uniqueId()) {
 
             result = KoColorSpaceRegistry::instance()->
                     colorSpace(RGBAColorModelID.id(), Float32BitsColorDepthID.id(),


Note that it's easier to figure out where a crash happens if you build with the DEBUG cmake build type.
Comment 2 Timo Gurr 2021-11-11 10:35:43 UTC
(In reply to Halla Rempt from comment #1)
> Please try this:
> 
> diff --git a/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
> b/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
> index 99106fa1c1..4b23367cb6 100644
> --- a/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
> +++ b/plugins/dockers/smallcolorselector/kis_small_color_widget.cc
> @@ -72,8 +72,11 @@ struct KisSmallColorWidget::Private {
>          }
>  
>          // PQ color space we deliniearize into linear one
> -        if (result && result->colorModelId() == RGBAColorModelID &&
> -            result->profile()->uniqueId() ==
> KoColorSpaceRegistry::instance()->p2020PQProfile()->uniqueId()) {
> +        if (result
> +                && result->colorModelId() == RGBAColorModelID
> +                && result->profile()
> +                && KoColorSpaceRegistry::instance()->p2020PQProfile()
> +                && result->profile()->uniqueId() ==
> KoColorSpaceRegistry::instance()->p2020PQProfile()->uniqueId()) {
>  
>              result = KoColorSpaceRegistry::instance()->
>                      colorSpace(RGBAColorModelID.id(),
> Float32BitsColorDepthID.id(),
> 
> 
> Note that it's easier to figure out where a crash happens if you build with
> the DEBUG cmake build type.

I can confirm that the patch you've provided fixes the issue. Thank you very much again and also for the hint about the build type, I'll make sure to compile with Debug (or RelWithDebInfo) next time before I'll report an issue.
Comment 3 Halla Rempt 2021-11-11 10:39:34 UTC
Git commit 382d300c788a3ba68e6bdf3a75fe5ccb5c3454f5 by Halla Rempt.
Committed on 11/11/2021 at 10:39.
Pushed by rempt into branch 'master'.

Check pointers before derefencing

M  +5    -2    plugins/dockers/smallcolorselector/kis_small_color_widget.cc

https://invent.kde.org/graphics/krita/commit/382d300c788a3ba68e6bdf3a75fe5ccb5c3454f5
Comment 4 Halla Rempt 2021-11-11 10:39:42 UTC
Git commit acd7219d31ee3c15381c0f3ef014422aa92daeb7 by Halla Rempt.
Committed on 11/11/2021 at 10:39.
Pushed by rempt into branch 'krita/5.0'.

Check pointers before derefencing
(cherry picked from commit 382d300c788a3ba68e6bdf3a75fe5ccb5c3454f5)

M  +5    -2    plugins/dockers/smallcolorselector/kis_small_color_widget.cc

https://invent.kde.org/graphics/krita/commit/acd7219d31ee3c15381c0f3ef014422aa92daeb7
Comment 5 Halla Rempt 2021-11-11 10:40:01 UTC
Fix pushed, let's see what else you uncover...