Skip to content

YACReader segfaults when switching comics too fast (unarr only?) #211

@selmf

Description

@selmf

When switching between comics too fast YACReader sometimes tries to access a page index that is out of range for the current comic, resulting in a segfault and crash.

Backtrace:

#0  0x00007ffff534aef5 in raise () at /usr/lib/libc.so.6
#1  0x00007ffff5334862 in abort () at /usr/lib/libc.so.6
#2  0x00007ffff74a6dcf in __interceptor_abort(int) (fake=-10808) at /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1772
#3  0x00007ffff59509ac in  () at /usr/lib/libQt5Core.so.5
#4  0x00007ffff594fdb6 in  () at /usr/lib/libQt5Core.so.5
#5  0x00005555555928c2 in QVector<bool>::operator[](int) (this=0x7b1c00033200, i=29) at /usr/include/qt/QtCore/qvector.h:462
#6  0x00005555555e2550 in Render::fillBuffer() (this=0x7b1c000331b0) at render.cpp:984
#7  0x00005555555ddfb1 in Render::render() (this=0x7b1c000331b0) at render.cpp:436
#8  0x00005555555e008d in Render::update() (this=0x7b1c000331b0) at render.cpp:647
#9  0x00005555555e1ac8 in Render::pageRawDataReady(int) (this=0x7b1c000331b0, page=28) at render.cpp:879
#10 0x000055555564b2b6 in Render::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)
    (_o=0x7b1c000331b0, _c=QMetaObject::InvokeMetaMethod, _id=30, _a=0x7b1c00069898) at moc_render.cpp:426
#11 0x00007ffff5ba2532 in QObject::event(QEvent*) () at /usr/lib/libQt5Core.so.5
#12 0x00007ffff68d0752 in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/libQt5Widgets.so.5
#13 0x00007ffff5b75a2a in QCoreApplication::notifyInternal2(QObject*, QEvent*) () at /usr/lib/libQt5Core.so.5
#14 0x00007ffff5b78523 in QCoreApplicationPrivate::sendPostedEvents(QObject*, int, QThreadData*) () at /usr/lib/libQt5Core.so.5
#15 0x00007ffff5bcf054 in  () at /usr/lib/libQt5Core.so.5
#16 0x00007ffff4326b54 in g_main_context_dispatch () at /usr/lib/libglib-2.0.so.0
#17 0x00007ffff437abf1 in  () at /usr/lib/libglib-2.0.so.0
#18 0x00007ffff4325381 in g_main_context_iteration () at /usr/lib/libglib-2.0.so.0
#19 0x00007ffff5bce691 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#20 0x00007ffff5b743ac in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/libQt5Core.so.5
#21 0x00007ffff5b7c844 in QCoreApplication::exec() () at /usr/lib/libQt5Core.so.5
#22 0x00005555555873e9 in main(int, char**) (argc=1, argv=0x7fffffffdfb8) at main.cpp:185

This is likely the result of an incomplete cleanup when the previous comic did not finish loading before being removed.

@vedgy , I have reason to believe that #202 would fix this issue. Could you please verify this for me and if it turns out to be the case, create a stripped down version of the fix with minimal impact on the current code structure? We will likely need to apply this fix to both master and develop and #202 has too many changes to safely do that.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions