New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Archive test fails on musl-libc. #671
Comments
More info from gdb [animesh@/home/animesh/Projects/void-packages/masterdir-x86_64-musl /]$ ZIM_TEST_DATA_DIR=/builddir/libzim-7.2.0/build/test/data gdb -ex run -args /builddir/libzim-7.2.0/build/test/archive
# ... Some OK lines ...
[ RUN ] ZimArchive.openCreatedArchive
[New LWP 23105]
[New LWP 23106]
[New LWP 23107]
[New LWP 23108]
[New LWP 23109]
Resolve redirect
Invalid redirection C/foo4 redirecting to (missing) C/NoExistant
set index
[LWP 23107 exited]
[LWP 23105 exited]
[LWP 23106 exited]
[LWP 23108 exited]
[LWP 23109 exited]
# ... Some OK lines ...
[ RUN ] ZimArchive.validate
terminate called after throwing an instance of 'zim::ZimFileFormatError'
what(): Invalid dirent pointer
Thread 1 "archive" received signal SIGABRT, Aborted.
__restore_sigs (set=set@entry=0x7fffffffde20) at ./arch/x86_64/syscall_arch.h:40
40 return ret;
(gdb) bt
#0 __restore_sigs (set=set@entry=0x7fffffffde20) at ./arch/x86_64/syscall_arch.h:40
#1 0x00007ffff7fa5620 in raise (sig=sig@entry=6) at src/signal/raise.c:11
#2 0x00007ffff7f6de20 in abort () at src/exit/abort.c:13
#3 0x00007ffff7c655eb in ?? () from /usr/lib64/libstdc++.so.6
#4 0x00007ffff7c929a8 in __cxxabiv1::__terminate(void (*)()) () from /usr/lib64/libstdc++.so.6
#5 0x00007ffff7c92a11 in std::terminate() () from /usr/lib64/libstdc++.so.6
#6 0x00007ffff7c92ca4 in __cxa_throw () from /usr/lib64/libstdc++.so.6
#7 0x00007ffff7eca565 in zim::DirentReader::readDirent(zim::offset_t) [clone .cold] () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#8 0x00007ffff7ed8211 in zim::DirectDirentAccessor::readDirent(zim::offset_t) const () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#9 0x00007ffff7ed82d1 in zim::DirectDirentAccessor::getDirent(zim::entry_index_t) const () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#10 0x00007ffff7ee01b5 in zim::DirentLookup<zim::DirectDirentAccessor>::getDirentKey[abi:cxx11](unsigned int) const ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#11 0x00007ffff7ee1f4a in std::call_once<zim::FileImpl::direntLookup() const::{lambda()#1}>(std::once_flag&, zim::FileImpl::direntLookup() const::{lambda()#1}&&)::{lambda()#2}::_FUN() [clone .lto_priv.0] () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#12 0x00007ffff7fb7f28 in __pthread_once_full (init=0x7ffff7cbc580 <__once_proxy>, control=0x5555555b5810) at src/thread/pthread_once.c:22
#13 __pthread_once_full (control=0x5555555b5810, init=0x7ffff7cbc580 <__once_proxy>) at src/thread/pthread_once.c:11
#14 0x00007ffff7ed558c in zim::FileImpl::direntLookup() const () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#15 0x00007ffff7ed8abf in zim::FileImpl::getTitleAccessor(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#16 0x00007ffff7eda888 in zim::FileImpl::FileImpl(std::shared_ptr<zim::FileCompound>, zim::offset_t, zim::zsize_t) ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#17 0x00007ffff7edad6b in zim::FileImpl::FileImpl(std::shared_ptr<zim::FileCompound>) () from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#18 0x00007ffff7edae41 in zim::FileImpl::FileImpl(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#19 0x00007ffff7edaed2 in zim::Archive::Archive(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#20 0x00007ffff7edaf4d in zim::validate(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::bitset<6ul>) ()
from /builddir/libzim-7.2.0/build/test/../src/libzim.so.7
#21 0x0000555555566890 in (anonymous namespace)::ZimArchive_validate_Test::TestBody() [clone .lto_priv.0] ()
#22 0x00007ffff7e8bba7 in void testing::internal::HandleExceptionsInMethodIfSupported<testing::Test, void>(testing::Test*, void (testing::Test::*)(), char const*) () from /usr/lib64/libgtest.so.1.11.0
#23 0x00007ffff7e804fe in testing::Test::Run() () from /usr/lib64/libgtest.so.1.11.0
#24 0x00007ffff7e80675 in testing::TestInfo::Run() () from /usr/lib64/libgtest.so.1.11.0
#25 0x00007ffff7e80b19 in testing::TestSuite::Run() () from /usr/lib64/libgtest.so.1.11.0
#26 0x00007ffff7e8124a in testing::internal::UnitTestImpl::RunAllTests() () from /usr/lib64/libgtest.so.1.11.0
#27 0x00007ffff7e8c117 in bool testing::internal::HandleExceptionsInMethodIfSupported<testing::internal::UnitTestImpl, bool>(testing::internal::UnitTestImpl*, bool (testing::internal::UnitTestImpl::*)(), char const*) () from /usr/lib64/libgtest.so.1.11.0
#28 0x00007ffff7e80738 in testing::UnitTest::Run() () from /usr/lib64/libgtest.so.1.11.0
#29 0x00007ffff7ea60db in main () from /usr/lib64/libgtest_main.so.1.11.0
#30 0x00007ffff7f6d70a in libc_start_main_stage2 (main=0x7ffff7ea60a0 <main>, argc=1, argv=0x7fffffffec48) at src/env/__libc_start_main.c:94
#31 0x0000555555560d19 in _start () Referencing musl/arch/x86_64/syscall_arch.h#L40 from src/dirent.cpp#L121 (at #7) originating from test/archive.cpp#L376 (at #20). Digging in, And failure starts by bug possibly present here src/writer/creator.cpp. |
May I know more about the NoExistant redirection, so that I can help further? Line 168 in 67eaa57
|
@Animeshz Like you see, we don't have tested against musl... but we better should. Would be great to have a CI entry for Github actions able to do so. |
@Animeshz This is a question better @veloman-yunkan or @mgautierfr should answer. |
The unit-test intentionally adds a redirection to a non-existent entry. During ZIM creation such invalid redirections must be dropped. The unit-test checks that it works as intended. It turns out that with a musl build of libzim it doesn't (provided that your investigation so far has gone in the correct direction) |
The crash is caused by a bug in #include <thread>
#include <mutex>
#include <iostream>
#include <stdexcept>
void foo(int i) {
std::cout << "foo(" << i << "): prethrow" << std::endl;
throw std::runtime_error("Oops!");
std::cout << "foo(" << i << "): postthrow" << std::endl;
}
int main() {
std::once_flag once;
for ( int i = 1; i < 5; ++i ) {
std::cout << "loop: " << i << std::endl;
try {
std::call_once(once, [=]() { foo(i); });
} catch(const std::runtime_error& ex) {
std::cout << "catch: " << ex.what() << std::endl;
}
}
return 0;
} Under alpine:
Under Ubuntu the same test program uncovers another bug with the handling of exceptional executions of
|
Test run output:
Affected file: test/archive.cpp
The text was updated successfully, but these errors were encountered: