vle-forge / vle

Virtual Laboratory Environment
http://www.vle-project.org
GNU General Public License v3.0
21 stars 22 forks source link

PackageManager/RemoteManager: malformed remote.pkg -> crash #318

Closed quesnel closed 6 years ago

quesnel commented 6 years ago

Due to a noexcept attribute:

extract(vle::utils::ContextPtr ctx, vle::utils::Packages* out, const std::string& filepath) noexcept

Trace:

terminate called after throwing an instance of 'vle::utils::FileError'
  what():  Remote: syntax error in file `/home/gquesnel/homevle/remote.pkg' l. 0 c. 1: -1

Thread 1 "gvle" received signal SIGABRT, Aborted.
0x00007ffff62b4428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
54      ../sysdeps/unix/sysv/linux/raise.c: Aucun fichier ou dossier de ce type.
(gdb) bt
#0  0x00007ffff62b4428 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:54
#1  0x00007ffff62b602a in __GI_abort () at abort.c:89
#2  0x00007ffff68ef84d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff68ed6b6 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff68ec6a9 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff68ed005 in __gxx_personality_v0 () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff6659013 in ?? () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#7  0x00007ffff6659517 in _Unwind_Resume () from /lib/x86_64-linux-gnu/libgcc_s.so.1
#8  0x00007ffff7798d51 in vle::utils::PackageParser::extract(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) ()
   from /home/gquesnel/usr/lib/libvle-2.0.so.0
#9  0x00007ffff7793bef in (anonymous namespace)::extract(std::shared_ptr<vle::utils::Context>, std::vector<vle::utils::PackageId, std::allocator<vle::utils::PackageId> >*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) [clone .isra.100] () from /home/gquesnel/usr/lib/libvle-2.0.so.0
#10 0x00007ffff7794126 in vle::utils::RemotePackageManager::extract(std::shared_ptr<vle::utils::Context>, std::vector<vle::utils::PackageId, std::allocator<vle::utils::PackageId> >*) () from /home/gquesnel/usr/lib/libvle-2.0.so.0
#11 0x00007ffff77f5b46 in vle::utils::RemoteManager::RemoteManager(std::shared_ptr<vle::utils::Context>) () from /home/gquesnel/usr/lib/libvle-2.0.so.0
#12 0x00007ffff7b37ab7 in vle::gvle::gvle_win::menuPackagesInstallRefresh() () from /home/gquesnel/usr/lib/libgvle-2.0.so.0
#13 0x00007ffff7b391e8 in vle::gvle::gvle_win::menuDistributionsRefresh() () from /home/gquesnel/usr/lib/libgvle-2.0.so.0
#14 0x00007ffff7b3dc63 in vle::gvle::gvle_win::gvle_win(std::shared_ptr<vle::utils::Context> const&, QWidget*) () from /home/gquesnel/usr/lib/libgvle-2.0.so.0
#15 0x0000000000402293 in main ()
quesnel commented 6 years ago
bool
extract(vle::utils::ContextPtr ctx,
        vle::utils::Packages* out,
        const std::string& filepath)
[...]

bool
LocalPackageManager::rebuild(ContextPtr ctx, Packages* out)
{
    try {
        return ::rebuild(ctx, out);
    } catch (const std::exception& e) {
        vErr(ctx,
             _("Remote: failed to rebuild cache of installed"
               " package: %s\n"),
             e.what());

        return false;
    }
}

Returns bool but no test. Please homogenize.