Bug 346932

Summary: Loading a KRA file with pattern layer styles crashes Krita
Product: [Applications] krita Reporter: Scott Petrovic <scottpetrovic>
Component: File formatsAssignee: Dmitry Kazakov <dimula73>
Status: RESOLVED FIXED    
Severity: crash CC: freebox64, halla
Priority: NOR    
Version First Reported In: git master (please specify the git hash!)   
Target Milestone: ---   
Platform: Compiled Sources   
OS: Linux   
Latest Commit: Version Fixed In:
Sentry Crash Report:

Description Scott Petrovic 2015-04-30 05:18:45 UTC
Most of the loading/saving of layer styles appears to be working. When try to load a KRA file that had a pattern saved, Krita will crash when trying to open the file.



Reproducible: Always

Steps to Reproduce:
1. Add a pattern layer style to a document
2. Save the document and close it
3. Try to open the document.

Actual Results:  
Krita crashes

Expected Results:  
Krita does not crash

Here is the file I am using... http://www.scottpetrovic.com/uploads/krita/layer-styles-test.kra.tar.gz

I did a clean build, so I think that is ok. Here is part of the stack trace that I think would be helpful.

Thread 1 (Thread 0x7fa4653027c0 (LWP 16051)):
[KCrash Handler]
#5  __memcpy_sse2_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-sse2-unaligned.S:152
#6  0x00007fa46317b323 in QIODevice::read(char*, long long) () from /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#7  0x00007fa4635ee7b7 in KFilterDev::seek(long long) () from /usr/lib/libkdecore.so.5
#8  0x00007fa45fc380d1 in KisOffsetOnExitVerifier::~KisOffsetOnExitVerifier (this=0x7ffef0b33db0, __in_chrg=<optimized out>) at /home/scott/kde4/src/calligra/krita/libpsd/asl/kis_offset_on_exit_verifier.h:67
#9  0x00007fa45fc32872 in Private::readVirtualArrayList (device=device@entry=0x7ffef0b34990, numPlanes=numPlanes@entry=3) at /home/scott/kde4/src/calligra/krita/libpsd/asl/kis_asl_reader.cpp:367
#10 0x00007fa45fc3477e in Private::readPattern (device=device@entry=0x7ffef0b34990, parent=parent@entry=0x7ffef0b344d0, doc=doc@entry=0x7ffef0b34550) at /home/scott/kde4/src/calligra/krita/libpsd/asl/kis_asl_reader.cpp:468
#11 0x00007fa45fc3613a in Private::readFileImpl (device=device@entry=0x7ffef0b34990) at /home/scott/kde4/src/calligra/krita/libpsd/asl/kis_asl_reader.cpp:537
#12 0x00007fa45fc37943 in KisAslReader::readFile (this=this@entry=0x7ffef0b345ae, device=device@entry=0x7ffef0b34990) at /home/scott/kde4/src/calligra/krita/libpsd/asl/kis_asl_reader.cpp:583
#13 0x00007fa464bb844f in KisAslLayerStyleSerializer::readFromDevice (this=this@entry=0x7ffef0b34670, device=device@entry=0x7ffef0b34990) at /home/scott/kde4/src/calligra/krita/ui/kis_asl_layer_style_serializer.cpp:1124
#14 0x00007fa464bd9946 in KisPSDLayerStyleCollectionResource::loadFromDevice (this=0x987c4e0, dev=0x7ffef0b34990) at /home/scott/kde4/src/calligra/krita/ui/kis_psd_layer_style_resource.cpp:70
#15 0x00007fa464af1d26 in KisKraLoader::loadBinaryData (this=0x98518f0, store=store@entry=0x9803500, image=..., uri=..., external=external@entry=true) at /home/scott/kde4/src/calligra/krita/ui/kra/kis_kra_loader.cpp:356
#16 0x00007fa464bea6df in KisDocument::completeLoading (this=0x2c59e60, store=0x9803500) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:1843
#17 0x00007fa464bf47ca in KisDocument::loadNativeFormatFromStoreInternal (this=this@entry=0x2c59e60, store=store@entry=0x9803500) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:1698
#18 0x00007fa464bf4de4 in KisDocument::loadNativeFormat (this=0x2c59e60, file_=...) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:1627
#19 0x00007fa464bf2790 in KisDocument::openFile (this=0x2c59e60) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:1416
#20 0x00007fa464bf6a0b in openFile (this=0x89bc720) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:380
#21 openLocalFile (this=0x89bc720) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:402
#22 KisDocument::openUrlInternal (this=this@entry=0x2c59e60, url=...) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:2425
#23 0x00007fa464bf6d97 in KisDocument::openUrl (this=0x2c59e60, _url=...) at /home/scott/kde4/src/calligra/krita/ui/KisDocument.cpp:1232
#24 0x00007fa464c17d82 in KisMainWindow::openDocumentInternal (this=this@entry=0x20b6c50, url=..., newdoc=0x2c59e60, newdoc@entry=0x0) at /home/scott/kde4/src/calligra/krita/ui/KisMainWindow.cpp:677
#25 0x00007fa464c1c565 in KisMainWindow::openDocument (this=this@entry=0x20b6c50, url=...) at /home/scott/kde4/src/calligra/krita/ui/KisMainWindow.cpp:663
Comment 1 Halla Rempt 2015-05-20 11:48:25 UTC
Hm, the test file now leads to an infinite loop and trying to save another file with a pattern overlay style to .kra gives

WARNING: Saved pattern doesn't have a UUID, generating... 
patternFileName = "/home/boud/kde/2.9/share/apps/krita/patterns/01_canvas.png" pattern->name() = "01_canvas.png" 
Unknown composite op: "Nrml" Returning "Nrml"! 
Error std::bad_alloc sending event 117 to object file_save

Then an assert:
Thread 1 (Thread 0x7f60e39f47c0 (LWP 7804)):
[KCrash Handler]
#5  0x00007f60da5e7187 in raise () at /lib64/libc.so.6
#6  0x00007f60da5e8538 in abort () at /lib64/libc.so.6
#7  0x00007f60db8e22b4 in qt_message_output(QtMsgType, char const*) () at /usr/lib64/libQtCore.so.4
#8  0x00007f60db8e2439 in  () at /usr/lib64/libQtCore.so.4
#9  0x00007f60db8e2c44 in qFatal(char const*, ...) () at /usr/lib64/libQtCore.so.4
#10 0x00007f60db8e2c8a in  () at /usr/lib64/libQtCore.so.4
#11 0x00007f60e329997a in KisDocument::saveXML() (this=0x4ff8180) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:1993
#12 0x00007f60e32987fa in KisDocument::saveToStream(QIODevice*) (this=this@entry=0x4ff8180, dev=dev@entry=0x7ffc26a9dfb0) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:1025
#13 0x00007f60e32a2d74 in KisDocument::saveNativeFormatCalligra(KoStore*) (this=this@entry=0x4ff8180, store=store@entry=0x7f60ade27370) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:980
#14 0x00007f60e32a3626 in KisDocument::saveNativeFormat(QString const&) (this=this@entry=0x4ff8180, file=...) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:972
#15 0x00007f60e329c991 in KisDocument::saveFile() (this=0x4ff8180) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:732
#16 0x00007f60e32a5aa1 in KisDocument::save() (this=0x4ff8180) at /home/boud/kde/src/2.9/krita/ui/KisDocument.cpp:2315
#17 0x00007f60e32db70e in KisMainWindow::saveDocument(KisDocument*, bool, bool, int) (this=0x3686160, document=document@entry=0x4ff8180, saveas=saveas@entry=false, silent=silent@entry=false, specialOutputFlag=specialOutputFlag@entry=0) at /home/boud/kde/src/2.9/krita/ui/KisMainWindow.cpp:971
#18 0x00007f60e33074f2 in KisView::queryClose() (this=this@entry=0x507a860) at /home/boud/kde/src/2.9/krita/ui/KisView.cpp:799
#19 0x00007f60e3307778 in KisView::closeEvent(QCloseEvent*) (this=0x507a860, event=0x7ffc26a9ef50) at /home/boud/kde/src/2.9/krita/ui/KisView.cpp:759
#20 0x00007f60dc44b806 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#21 0x00007f60e330dea5 in KisView::event(QEvent*) (this=0x507a860, event=<optimized out>) at /home/boud/kde/src/2.9/krita/ui/KisView.cpp:746
#22 0x00007f60dc3fc76c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#23 0x00007f60dc402cad in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#24 0x00007f60e3290ca7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x507a860, event=0x7ffc26a9ef50) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:517
#25 0x00007f60db9ee2ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQtCore.so.4
#26 0x00007f60dc448079 in QWidgetPrivate::close_helper(QWidgetPrivate::CloseMode) () at /usr/lib64/libQtGui.so.4
#27 0x00007f60dc81dd04 in QMdiSubWindow::closeEvent(QCloseEvent*) () at /usr/lib64/libQtGui.so.4
#28 0x00007f60dc44b806 in QWidget::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#29 0x00007f60dc81d59b in QMdiSubWindow::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#30 0x00007f60dc3fc76c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#31 0x00007f60dc402cad in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#32 0x00007f60e3290ca7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x6acbe30, event=0x7ffc26a9f400) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:517
#33 0x00007f60db9ee2ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQtCore.so.4
#34 0x00007f60dc448079 in QWidgetPrivate::close_helper(QWidgetPrivate::CloseMode) () at /usr/lib64/libQtGui.so.4
#35 0x00007f60dc448d66 in  () at /usr/lib64/libQtGui.so.4
#36 0x00007f60dba021fa in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () at /usr/lib64/libQtCore.so.4
#37 0x00007f60dc3f6622 in QAction::triggered(bool) () at /usr/lib64/libQtGui.so.4
#38 0x00007f60dc3f7fd3 in QAction::activate(QAction::ActionEvent) () at /usr/lib64/libQtGui.so.4
#39 0x00007f60dc3f812c in QAction::event(QEvent*) () at /usr/lib64/libQtGui.so.4
#40 0x00007f60dc3fc76c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#41 0x00007f60dc402cad in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#42 0x00007f60e3290ca7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x54ee5b0, event=0x7ffc26a9f880) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:517
#43 0x00007f60db9ee2ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQtCore.so.4
#44 0x00007f60dc42d9d6 in  () at /usr/lib64/libQtGui.so.4
#45 0x00007f60dc42db0c in  () at /usr/lib64/libQtGui.so.4
#46 0x00007f60dc403fe3 in QApplication::notify(QObject*, QEvent*) () at /usr/lib64/libQtGui.so.4
#47 0x00007f60e3290ca7 in KisApplication::notify(QObject*, QEvent*) (this=<optimized out>, receiver=0x1aad4f0, event=0x7ffc26a9fbd0) at /home/boud/kde/src/2.9/krita/ui/KisApplication.cpp:517
#48 0x00007f60db9ee2ad in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib64/libQtCore.so.4
#49 0x00007f60dc496ab7 in  () at /usr/lib64/libQtGui.so.4
#50 0x00007f60dc496e59 in  () at /usr/lib64/libQtGui.so.4
#51 0x00007f60dc472a5f in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib64/libQtGui.so.4
#52 0x00007f60dc499f30 in  () at /usr/lib64/libQtGui.so.4
#53 0x00007f60db9ece6f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQtCore.so.4
#54 0x00007f60db9ed165 in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib64/libQtCore.so.4
#55 0x00007f60db9f25b9 in QCoreApplication::exec() () at /usr/lib64/libQtCore.so.4
#56 0x0000000000402ae2 in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /home/boud/kde/src/2.9/krita/main.cc:179
Comment 2 Halla Rempt 2015-05-20 11:49:54 UTC
Also added to phabricator for Dmitry to look into:

https://phabricator.kde.org/T310
Comment 3 Dmitry Kazakov 2015-07-06 10:49:53 UTC
Git commit 2d1634ddcef059837f1e2cdc6df7f2fa6b19305c by Dmitry Kazakov.
Committed on 06/07/2015 at 10:49.
Pushed by dkazakov into branch 'calligra/2.9'.

Fix crash/problem when saving a pattern to a .kra file

Add two methods to KoPattern which save the file into .pat
format not taking file extension into account
Fixes T310

M  +1    -1    krita/libpsd/asl/kis_asl_reader.cpp
M  +1    -1    krita/libpsd/asl/kis_asl_xml_parser.cpp
M  +1    -1    krita/libpsd/asl/kis_asl_xml_writer.cpp
M  +61   -51   libs/pigment/resources/KoPattern.cpp
M  +3    -0    libs/pigment/resources/KoPattern.h

http://commits.kde.org/calligra/2d1634ddcef059837f1e2cdc6df7f2fa6b19305c
Comment 4 Dmitry Kazakov 2015-07-11 16:15:33 UTC
*** Bug 349603 has been marked as a duplicate of this bug. ***