https://bugs.kde.org/show_bug.cgi?id=471970
Bug ID: 471970 Summary: Closing the document while animation cache is being populated causes a crash under ASAN Classification: Applications Product: krita Version: git master (please specify the git hash!) Platform: Other OS: Other Status: REPORTED Severity: crash Priority: NOR Component: OpenGL Canvas Assignee: krita-bugs-n...@kde.org Reporter: dimul...@gmail.com Target Milestone: --- STEPS TO REPRODUCE 1. Open a huge document with animation 2. Check that the cache is being populated 3. Press Ctrl+W ================================================================= ==77748==ERROR: AddressSanitizer: heap-use-after-free on address 0x6020000f4a30 at pc 0x7fc5eac6bfdc bp 0x7ffcd81d4750 sp 0x7ffcd81d4740 READ of size 8 at 0x6020000f4a30 thread T0 #0 0x7fc5eac6bfdb in KisTextureTile::~KisTextureTile() /home/appimage/persistent/krita/libs/ui/opengl/kis_texture_tile.cpp:108 #1 0x7fc5eac52587 in KisOpenGLImageTextures::destroyImageTextureTiles() /home/appimage/persistent/krita/libs/ui/opengl/kis_opengl_image_textures.cpp:301 #2 0x7fc5eac5bb1e in KisOpenGLImageTextures::~KisOpenGLImageTextures() /home/appimage/persistent/krita/libs/ui/opengl/kis_opengl_image_textures.cpp:134 #3 0x7fc5eac5d2f5 in KisOpenGLImageTextures::~KisOpenGLImageTextures() /home/appimage/persistent/krita/libs/ui/opengl/kis_opengl_image_textures.cpp:138 #4 0x7fc5eba00470 in KisSharedPtr<KisOpenGLImageTextures>::deref(KisSharedPtr<KisOpenGLImageTextures> const*, KisOpenGLImageTextures*) /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:202 #5 0x7fc5eba00470 in KisSharedPtr<KisOpenGLImageTextures>::deref(KisSharedPtr<KisOpenGLImageTextures> const*, KisOpenGLImageTextures*) /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:194 #6 0x7fc5eba00470 in KisSharedPtr<KisOpenGLImageTextures>::deref() const /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:216 #7 0x7fc5eba00470 in KisSharedPtr<KisOpenGLImageTextures>::~KisSharedPtr() /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:100 #8 0x7fc5eba00470 in KisAnimationFrameCache::Private::~Private() /home/appimage/persistent/krita/libs/ui/kis_animation_frame_cache.cpp:42 #9 0x7fc5eba00470 in QScopedPointerDeleter<KisAnimationFrameCache::Private>::cleanup(KisAnimationFrameCache::Private*) /home/appimage/appimage-workspace/deps/usr/include/QtCore/qscopedpointer.h:60 #10 0x7fc5eba00470 in QScopedPointer<KisAnimationFrameCache::Private, QScopedPointerDeleter<KisAnimationFrameCache::Private> >::~QScopedPointer() /home/appimage/appimage-workspace/deps/usr/include/QtCore/qscopedpointer.h:107 #11 0x7fc5eba00470 in KisAnimationFrameCache::~KisAnimationFrameCache() /home/appimage/persistent/krita/libs/ui/kis_animation_frame_cache.cpp:224 #12 0x7fc5eba00dd5 in KisAnimationFrameCache::~KisAnimationFrameCache() /home/appimage/persistent/krita/libs/ui/kis_animation_frame_cache.cpp:224 #13 0x7fc5eba31db2 in KisSharedPtr<KisAnimationFrameCache>::deref(KisSharedPtr<KisAnimationFrameCache> const*, KisAnimationFrameCache*) /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:202 #14 0x7fc5eba31db2 in KisSharedPtr<KisAnimationFrameCache>::deref(KisSharedPtr<KisAnimationFrameCache> const*, KisAnimationFrameCache*) /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:194 #15 0x7fc5eba31db2 in KisSharedPtr<KisAnimationFrameCache>::attach(KisAnimationFrameCache*) /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:509 #16 0x7fc5eba31db2 in KisSharedPtr<KisAnimationFrameCache>::clear() /home/appimage/persistent/krita/libs/global/kis_shared_ptr.h:516 #17 0x7fc5eba31db2 in KisAsyncAnimationCacheRenderer::clearFrameRegenerationState(bool) /home/appimage/persistent/krita/libs/ui/KisAsyncAnimationCacheRenderer.cpp:66 #18 0x7fc5eba27343 in KisAsyncAnimationRendererBase::notifyFrameCancelled(int, KisAsyncAnimationRendererBase::CancelReason) /home/appimage/persistent/krita/libs/ui/KisAsyncAnimationRendererBase.cpp:150 #19 0x7fc5eba2de7c in KisAsyncAnimationCacheRenderer::frameCancelledCallback(int, KisAsyncAnimationRendererBase::CancelReason) /home/appimage/persistent/krita/libs/ui/KisAsyncAnimationCacheRenderer.cpp:60 #20 0x7fc5eba26e9e in KisAsyncAnimationRendererBase::slotFrameRegenerationCancelled() /home/appimage/persistent/krita/libs/ui/KisAsyncAnimationRendererBase.cpp:100 #21 0x7fc5ea13a157 in KisAsyncAnimationRendererBase::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/appimage/appimage-workspace/krita-build/libs/ui/kritaui_autogen/EWIEGA46WW/moc_KisAsyncAnimationRendererBase.cpp:124 #22 0x7fc5ea13a157 in KisAsyncAnimationRendererBase::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) /home/appimage/appimage-workspace/krita-build/libs/ui/kritaui_autogen/EWIEGA46WW/moc_KisAsyncAnimationRendererBase.cpp:115 #23 0x7fc5e24285dd in QObject::event(QEvent*) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qobject.cpp:1347 #24 0x7fc5e2f5d7e2 in QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/widgets/kernel/qapplication.cpp:3637 #25 0x7fc5eb6993d9 in KisApplication::notify(QObject*, QEvent*) /home/appimage/persistent/krita/libs/ui/KisApplication.cpp:768 #26 0x7fc5e23fab59 in QCoreApplication::notifyInternal2(QObject*, QEvent*) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1064 #27 0x7fc5e23fdc46 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1821 #28 0x7fc5e2455056 in postEventSourceDispatch /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:277 #29 0x7fc5e08f117c in g_main_context_dispatch (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x5217c) #30 0x7fc5e08f13ff (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x523ff) #31 0x7fc5e08f14a2 in g_main_context_iteration (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x524a2) #32 0x7fc5e24546a7 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qeventdispatcher_glib.cpp:423 #33 0x7fc5e23f946a in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qeventloop.cpp:232 #34 0x7fc5e2401a13 in QCoreApplication::exec() /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/corelib/kernel/qcoreapplication.cpp:1375 #35 0x55da41a3ed84 in main /home/appimage/persistent/krita/krita/main.cc:731 #36 0x7fc5e1bda082 in __libc_start_main ../csu/libc-start.c:308 #37 0x55da41a427bd in _start (/home/appimage/appimage-workspace/krita.appdir/usr/bin/krita+0x1d7bd) 0x6020000f4a30 is located 0 bytes inside of 8-byte region [0x6020000f4a30,0x6020000f4a38) freed by thread T0 here: #0 0x7fc5ec51760f in operator delete(void*, unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:172 #1 0x7fc5e287978f in QOpenGLContext::destroy() /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/gui/kernel/qopenglcontext.cpp:655 previously allocated by thread T0 here: #0 0x7fc5ec5165a7 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:99 #1 0x7fc5e2875ca9 in QOpenGLContext::functions() const /home/appimage/appimage-workspace/deps-build/ext_qt/ext_qt-prefix/src/ext_qt/qtbase/src/gui/kernel/qopenglcontext.cpp:741 SUMMARY: AddressSanitizer: heap-use-after-free /home/appimage/persistent/krita/libs/ui/opengl/kis_texture_tile.cpp:108 in KisTextureTile::~KisTextureTile() Shadow bytes around the buggy address: 0x0c04800168f0: fa fa 00 fa fa fa fd fd fa fa fd fa fa fa fd fd 0x0c0480016900: fa fa fd fd fa fa fd fa fa fa fd fd fa fa 00 fa 0x0c0480016910: fa fa 00 fa fa fa fd fd fa fa fd fd fa fa fd fd 0x0c0480016920: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fa 0x0c0480016930: fa fa fd fd fa fa fd fa fa fa fd fd fa fa fd fa =>0x0c0480016940: fa fa 00 fa fa fa[fd]fa fa fa fd fd fa fa fd fa 0x0c0480016950: fa fa fd fa fa fa fd fa fa fa 00 fa fa fa fd fa 0x0c0480016960: fa fa fd fa fa fa fd fa fa fa fd fa fa fa 00 fa 0x0c0480016970: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd 0x0c0480016980: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd 0x0c0480016990: fa fa fd fd fa fa fd fd fa fa fd fd fa fa fd fd Shadow byte legend (one shadow byte represents 8 application bytes): Addressable: 00 Partially addressable: 01 02 03 04 05 06 07 Heap left redzone: fa Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 Container overflow: fc Array cookie: ac Intra object redzone: bb ASan internal: fe Left alloca redzone: ca Right alloca redzone: cb Shadow gap: cc ==77748==ABORTING -- You are receiving this mail because: You are watching all bug changes.