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
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
Also added to phabricator for Dmitry to look into: https://phabricator.kde.org/T310
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
*** Bug 349603 has been marked as a duplicate of this bug. ***