#941886 crashes with segfault while scanning library

Package:
fbreader
Source:
fbreader
Description:
e-book reader
Submitter:
Antoine Beaupre
Date:
2019-11-09 12:39:08 UTC
Severity:
important
#941886#5
Date:
2019-10-07 04:02:19 UTC
From:
To:
After starting fbreader (which takes 30 seconds), I go to the library
and hit settings. There I configure my ebook library (~/books), click
the "Look for books in subdirectories" button, and hit "OK".

After a little scanning, it totally crashes with the following backtrace:

(gdb) run
Starting program: /usr/bin/fbreader
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
loading /usr/lib/zlibrary/ui/zlui-qt4.so

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7ed10a2 in ZLZipDir::collectFiles(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool) () from /usr/lib/libzlcore.so.0.13
(gdb) br
Breakpoint 1 at 0x7ffff7ed10a2
(gdb) bt
#0  0x00007ffff7ed10a2 in ZLZipDir::collectFiles(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&, bool) () at /usr/lib/libzlcore.so.0.13
#1  0x0000555555707015 in BooksDBUtil::resetZipInfo(ZLFile const&) (zipFile=...) at ./fbreader/../zlibrary/core/include/shared_ptr.h:236
#2  0x00005555557071be in BooksDBUtil::listZipEntries(ZLFile const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) (zipFile=..., entries=std::vector of length 0, capacity 0) at ./fbreader/../zlibrary/core/include/ZLFile.h:99
#3  0x00005555555cfbdf in Library::collectBookFileNames(std::set<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >&) const
    (this=0x5555559ef710, bookFileNames=std::set with 87 elements = {...}) at Library.cpp:83
#4  0x00005555555d0083 in Library::rebuildBookSet() const (this=this@entry=0x5555559ef710) at Library.cpp:114
#5  0x00005555555d1390 in LibrarySynchronizer::run() (this=0x7fffffffb3b0) at Library.cpp:170
#6  0x00007ffff7fb7ede in ZLQtProgressDialog::run(ZLRunnable&) () at /usr/lib/zlibrary/ui/zlui-qt4.so
#7  0x00007ffff7ed5314 in ZLDialogManager::wait(ZLResourceKey const&, ZLRunnable&) const () at /usr/lib/libzlcore.so.0.13
#8  0x00005555555cd23d in Library::synchronize() const (this=this@entry=0x5555559ef710) at /usr/include/c++/8/bits/basic_string.h:936
#9  0x00005555555cd2e9 in Library::authors() const (this=0x5555559ef710) at Library.cpp:310
#10 0x00005555555a98ee in LibraryByAuthorView::makeUpToDate() (this=0x5555557ec4d0) at LibraryByAuthorView.cpp:122
#11 0x00005555555896ca in LibraryView::paint() (this=0x5555557ec4d0) at LibraryView.cpp:38
#12 0x00007ffff7fbba6e in ZLQtViewWidget::Widget::paintEvent(QPaintEvent*) () at /usr/lib/zlibrary/ui/zlui-qt4.so
#13 0x00007ffff59aca28 in QWidget::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#14 0x00007ffff595aa2c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#15 0x00007ffff5961212 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#16 0x00007ffff63edafb in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#17 0x00007ffff59a7203 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#18 0x00007ffff59a7dfa in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
    at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#19 0x00007ffff59a6f09 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#20 0x00007ffff59a7dfa in QWidgetPrivate::paintSiblingsRecursive(QPaintDevice*, QList<QObject*> const&, int, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) ()
    at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#21 0x00007ffff59a6f09 in QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#22 0x00007ffff5b5faa8 in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#23 0x00007ffff599b350 in QWidgetPrivate::syncBackingStore() () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#24 0x00007ffff59ad138 in QWidget::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#25 0x00007ffff5d4c84b in QMainWindow::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#26 0x00007ffff595aa2c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#27 0x00007ffff5961212 in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#28 0x00007ffff63edafb in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#29 0x00007ffff5b60f4d in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#30 0x00007ffff599d66d in QWidget::repaint(QRect const&) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#31 0x00007ffff599d6cc in QWidget::repaint() () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#32 0x00007ffff7edb75a in ZLApplication::refreshWindow() () at /usr/lib/libzlcore.so.0.13
#33 0x0000555555699999 in FBReader::refreshWindow() (this=0x5555558362e0) at FBReader.cpp:204
#34 0x00007ffff7ed6408 in ZLOptionsDialog::run() () at /usr/lib/libzlcore.so.0.13
#35 0x00007ffff7f0a036 in ZLDesktopOptionsDialog::run() () at /usr/lib/libzlcore.so.0.13
#36 0x000055555568fd8e in ShowOptionsDialogAction::run() (this=<optimized out>) at ./fbreader/../zlibrary/core/include/shared_ptr.h:240
#37 0x00007ffff7edc157 in ZLApplication::doAction(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) () at /usr/lib/libzlcore.so.0.13
#38 0x00007ffff6401c90 in QMetaObject::activate(QObject*, QMetaObject const*, int, void**) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#39 0x00007ffff5955012 in QAction::triggered(bool) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#40 0x00007ffff59562a7 in QAction::activate(QAction::ActionEvent) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#41 0x00007ffff5cf2da3 in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#42 0x00007ffff5cf2ed4 in QAbstractButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#43 0x00007ffff5dad86a in QToolButton::mouseReleaseEvent(QMouseEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#44 0x00007ffff59aca28 in QWidget::event(QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#45 0x00007ffff595aa2c in QApplicationPrivate::notify_helper(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#46 0x00007ffff59613fc in QApplication::notify(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#47 0x00007ffff63edafb in QCoreApplication::notifyInternal(QObject*, QEvent*) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
--Type <RET> for more, q to quit, c to continue without paging--
#48 0x00007ffff5960b3b in QApplicationPrivate::sendMouseEvent(QWidget*, QMouseEvent*, QWidget*, QWidget*, QWidget**, QPointer<QWidget>&, bool) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#49 0x00007ffff59d3d84 in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#50 0x00007ffff59d29d0 in QApplication::x11ProcessEvent(_XEvent*) () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#51 0x00007ffff59fa06c in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#52 0x00007ffff564ef2e in g_main_context_dispatch () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#53 0x00007ffff564f1c8 in  () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#54 0x00007ffff564f25c in g_main_context_iteration () at /usr/lib/x86_64-linux-gnu/libglib-2.0.so.0
#55 0x00007ffff641a8e1 in QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#56 0x00007ffff59fa1f7 in  () at /usr/lib/x86_64-linux-gnu/libQtGui.so.4
#57 0x00007ffff63ec38f in QEventLoop::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#58 0x00007ffff63ec65e in QEventLoop::exec(QFlags<QEventLoop::ProcessEventsFlag>) () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#59 0x00007ffff63f1b2a in QCoreApplication::exec() () at /usr/lib/x86_64-linux-gnu/libQtCore.so.4
#60 0x00007ffff7fbd527 in ZLQtLibraryImplementation::run(ZLApplication*) () at /usr/lib/zlibrary/ui/zlui-qt4.so
#61 0x000055555558696c in main(int, char**) (argc=<optimized out>, argv=<optimized out>) at /usr/include/c++/8/bits/char_traits.h:285
(gdb)

It looks like it hit a problem in a Zip routine of some sort? It seems
like this specific zip file is causing some trouble:

(gdb) up
#1  0x0000555555707015 in BooksDBUtil::resetZipInfo (zipFile=...) at ./fbreader/../zlibrary/core/include/shared_ptr.h:236
236	./fbreader/../zlibrary/core/include/shared_ptr.h: No such file or directory.
(gdb) p zipFile
$1 = (const ZLFile &) @0x7fffffffaef0: {static ourPlainStreamCache = {<No data fields>},
  myPath = "/srv/books/.git/annex/objects/42/k6/SHA256E-s314645--55529471a826d0e5dfeb8ac1b720e0e09ed0adf2b511d70910cb953e57155ccc.zip:SHA256E-s314645--55529471a826d0e5dfeb8ac1b720e0e09ed0adf2b511d70910cb953e57155"..., myNameWithExtension = "SHA256E-s314645--55529471a826d0e5dfeb8ac1b720e0e09ed0adf2b511d70910cb953e57155ccc.zip",
  myNameWithoutExtension = "SHA256E-s314645--55529471a826d0e5dfeb8ac1b720e0e09ed0adf2b511d70910cb953e57155ccc", myExtension = "zip", myArchiveType = ZLFile::ZIP, myInfo = {Exists = true,
    IsDirectory = false, Size = 4096}, myInfoIsFilled = true}

mupdf can read this file without problem. One interesting thing in
that filename is the colo in the middle: that should be a slash, as
the first .zip path is actually a directory (git-annex oddity).

If I block (read, not execute) access to the git-annex directory, the
problem goes away, so this seems to be specifically a problem with a
directory structure like:

foo.zip/foo.zip

... although I haven't tested that directly to confirm.

#941886#10
Date:
2019-11-09 12:32:20 UTC
From:
To:
Hello Antoine,

Antoine Beaupre kirjoitti 7.10.2019 klo 6.02:

Thank you for the detailed report. Unfortunately, the upstream development
has stopped many years ago, and it's unlikely for problems to become fixed
unless somebody steps up.


Regards,