geometer / FBReader

Official FBReader C++ project repository
http://www.fbreader.org/
540 stars 169 forks source link

crash #317

Open AndreyBarmaley opened 4 years ago

AndreyBarmaley commented 4 years ago
Program received signal SIGABRT, Aborted.
0x00007ffff663aefb in raise () from /lib64/libc.so.6
Missing separate debuginfos, use: dnf debuginfo-install OpenEXR-libs-2.2.0-11.fc28.x86_64 adwaita-qt4-1.0-4.fc28.x86_64 bzip2-libs-1.0.6-26.fc28.x86_64 dbus-libs-1.12.10-1.fc28.x86_64 expat-2.2.5-3.fc28.x86_64 fontconfig-2.13.0-5.fc28.x86_64 freetype-2.8-10.fc28.x86_64 fribidi-1.0.2-1.fc28.x86_64 gamin-0.1.10-30.fc28.x86_64 glib2-2.56.4-1.fc28.x86_64 ilmbase-2.2.0-11.fc28.x86_64 jasper-libs-2.0.14-5.fc28.x86_64 jbigkit-libs-2.1-15.fc28.x86_64 kde-runtime-libs-17.08.3-6.fc28.x86_64 kdelibs-4.14.38-6.fc28.x86_64 lcms2-2.9-4.fc28.x86_64 libICE-1.0.9-12.fc28.x86_64 libSM-1.2.2-8.fc28.x86_64 libX11-1.6.7-1.fc28.x86_64 libXau-1.0.8-11.fc28.x86_64 libXcursor-1.1.15-1.fc28.x86_64 libXext-1.3.3-8.fc28.x86_64 libXfixes-5.0.3-5.fc28.x86_64 libXi-1.7.9-6.fc28.x86_64 libXinerama-1.1.3-10.fc28.x86_64 libXrandr-1.5.1-5.fc28.x86_64 libXrender-0.9.10-5.fc28.x86_64 libblkid-2.32.1-1.fc28.x86_64 libcap-2.25-9.fc28.x86_64 libffi-3.1-16.fc28.x86_64 libgcc-8.3.1-2.fc28.x86_64 libgcrypt-1.8.4-1.fc28.x86_64 libgpg-error-1.33-1.fc28.x86_64 libicu-60.2-2.fc28.x86_64 libjpeg-turbo-1.5.3-7.fc28.x86_64 libmng-2.0.3-7.fc28.x86_64 libmount-2.32.1-1.fc28.x86_64 libpng-1.6.34-6.fc28.x86_64 libselinux-2.8-1.fc28.x86_64 libstdc++-8.3.1-2.fc28.x86_64 libtiff-4.0.10-1.fc28.x86_64 libunibreak-4.0-2.fc28.x86_64 libuuid-2.32.1-1.fc28.x86_64 libwebp-1.0.2-1.fc28.x86_64 libxcb-1.13-1.fc28.x86_64 lz4-libs-1.8.1.2-4.fc28.x86_64 openssl-libs-1.1.0i-1.fc28.x86_64 pcre-8.43-1.fc28.x86_64 pcre2-10.33-2.fc28.x86_64 qt-4.8.7-45.fc28.x86_64 qt-x11-4.8.7-45.fc28.x86_64 sqlite-libs-3.22.0-5.fc28.x86_64 systemd-libs-238-12.git07f8cd5.fc28.x86_64 xz-libs-5.2.4-2.fc28.x86_64 zlib-1.2.11-8.fc28.x86_64 zlibrary-0.99.4-2.fc28.x86_64
(gdb) br
Breakpoint 1 at 0x7ffff663aefb
(gdb) bt
#0  0x00007ffff663aefb in raise () at /lib64/libc.so.6
#1  0x00007ffff66255b9 in abort () at /lib64/libc.so.6
#2  0x00007ffff6ffab3b in __gnu_cxx::__verbose_terminate_handler() [clone .cold.1] () at /lib64/libstdc++.so.6
#3  0x00007ffff7000fac in __cxxabiv1::__terminate(void (*)()) () at /lib64/libstdc++.so.6
#4  0x00007ffff7001007 in  () at /lib64/libstdc++.so.6
#5  0x00007ffff7001268 in  () at /lib64/libstdc++.so.6
#6  0x00007ffff6ffcb05 in std::__throw_out_of_range_fmt(char const*, ...) [clone .cold.5] () at /lib64/libstdc++.so.6
#7  0x00007ffff709ad4b in std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::substr(unsigned long, unsigned long) const () at /lib64/libstdc++.so.6
#8  0x00000000005b7ca9 in FindFileIdRunnable::run() (this=0xb2f210) at FindFileIdRunnable.cpp:73
#9  0x00000000005a4427 in SQLiteDataBase::executeAsTransaction(DBRunnable&) (this=0x907fe0, runnable=...) at SQLiteDataBase.cpp:100
#10 0x00000000005ae970 in BooksDB::setFileSize(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, int) (this=0x907fe0, fileName="123.fb2", size=2577269) at BooksDB.cpp:232
#11 0x00000000005abd90 in BooksDBUtil::saveInfo(ZLFile const&) (file=...) at BooksDBUtil.cpp:122
#12 0x00000000005ab689 in BooksDBUtil::getBook(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool) (filePath="123.fb2", checkFile=true) at BooksDBUtil.cpp:48
#13 0x00000000004626b1 in FBReader::createBook(ZLFile const&, shared_ptr<Book>&) (bookFile=..., book=...) at FBReader.cpp:233
#14 0x00000000004621fb in FBReader::initWindow() (this=0x96e430) at FBReader.cpp:194
#15 0x00007ffff7656dc5 in ZLQtLibraryImplementation::run(ZLApplication*) () at /lib64/libzlui.so.0.99
#16 0x0000000000469cd1 in main(int, char**) (argc=2, argv=0x7fffffffd6d8) at main.cpp:28

patch fixe it

diff -uNra a/fbreader/src/database/booksdb/runnables/FindFileIdRunnable.cpp b/fbreader/src/database/booksdb/runnables/FindFileIdRunn
able.cpp
--- a/fbreader/src/database/booksdb/runnables/FindFileIdRunnable.cpp    2012-11-30 21:41:25.000000000 +0900
+++ b/fbreader/src/database/booksdb/runnables/FindFileIdRunnable.cpp    2020-02-20 14:41:52.597614293 +0800
@@ -70,6 +70,9 @@
                        return true;
                }
                std::size_t index2 = resolvedPath.find(BooksDBQuery::ArchiveEntryDelimiter, index);
+               if(index2 > resolvedPath.size()) {
+                   return false;
+               }
                findName = resolvedPath.substr(index, index2 - index);
                index = index2 + 1;
                findParent = ((DBIntValue &) *physId).value();