MantisBT - VCMI |
View Issue Details |
|
ID | Project | Category | View Status | Date Submitted | Last Update |
0001100 | VCMI | Mechanics - Other | public | 2012-09-29 08:44 | 2014-05-30 17:41 |
|
Reporter | douggie_m | |
Assigned To | Ivan | |
Priority | normal | Severity | crash | Reproducibility | always |
Status | closed | Resolution | fixed | |
Platform | PowerPC | OS | GNU/Linux | OS Version | Debian Sid |
Product Version | | |
Target Version | | Fixed in Version | 0.9 | |
|
Summary | 0001100: SIGSEGV on attempt to start new map with rev2942 |
Description | Initialization of VCMI (together): 2920
[New Thread 0xf2b55450 (LWP 26836)]
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf2b55450 (LWP 26836)]
0x1054c41c in SelectionTab::parseMaps (this=0x10c156f8, files=..., start=1, threads=1) at CPreGame.cpp:1052
1052 int read = stream->read(mapBuffer, 1500);
(gdb) p stream
$1 = {
_M_t = {<std::_Tuple_impl<0u, CInputStream*, std::default_delete<CInputStream> >> = {<std::_Tuple_impl<1u, std::default_delete<CInputStream> >> = {<std::_Tuple_impl<2u>> = {<No data fields>}, <std::_Head_base<1u, std::default_delete<CInputStream>, true>> = {<std::default_delete<CInputStream>> = {<No data fields>}, <No data fields>}, <No data fields>}, <std::_Head_base<0u, CInputStream*, false>> = {
_M_head_impl = 0x0}, <No data fields>}, <No data fields>}}
(gdb) p mapBuffer
$2 = "\025\000\000\000\001H\000\000\000\001\f\000\000\000Step by Step\214\000\000\000A harsh winter has separated what once was your kingdom. Now that the winter is over, it is time to take your kingdom back, step by step. \001\000\001\001\000\377\001\001\001\001\377\003\a\000\000\377\000\000\000\000\000\001\001\000\377\001\001\001\001\377\003\005\001\000\377\000\000\000\000\000"... |
Steps To Reproduce | Launch vcmiclient, click New Game -> Single Scenario; or New Game -> Multiplayer. |
Additional Information | $ file '/usr/share/vcmi/Maps/Step by Step.h3m'
/usr/share/vcmi/Maps/Step by Step.h3m: gzip compressed data, from NTFS filesystem (NT) |
Tags | No tags attached. |
Relationships | |
Attached Files | usr-share-vcmi-Maps.tar.bz2 (2,173,343) 2012-09-29 09:18 https://bugs.vcmi.eu/file_download.php?file_id=1102&type=bug |
|
Issue History |
Date Modified | Username | Field | Change |
2012-09-29 08:44 | douggie_m | New Issue | |
2012-09-29 08:57 | douggie_m | Note Added: 0003082 | |
2012-09-29 09:15 | douggie_m | Note Added: 0003083 | |
2012-09-29 09:18 | douggie_m | File Added: usr-share-vcmi-Maps.tar.bz2 | |
2012-09-29 09:21 | Ivan | Note Added: 0003085 | |
2012-09-29 09:21 | Ivan | Assigned To | => Ivan |
2012-09-29 09:21 | Ivan | Status | new => assigned |
2012-09-29 09:23 | Ivan | Note Added: 0003087 | |
2012-09-29 09:28 | douggie_m | Note Added: 0003089 | |
2012-09-29 09:29 | douggie_m | Note Edited: 0003089 | bug_revision_view_page.php?bugnote_id=3089#r1937 |
2012-09-29 09:33 | Ivan | Note Added: 0003090 | |
2012-09-29 09:36 | douggie_m | Note Added: 0003091 | |
2012-09-29 09:36 | douggie_m | Note Edited: 0003089 | bug_revision_view_page.php?bugnote_id=3089#r1938 |
2012-09-29 09:44 | Ivan | Note Added: 0003092 | |
2012-09-29 09:48 | douggie_m | Note Added: 0003093 | |
2012-09-29 09:49 | douggie_m | Note Added: 0003094 | |
2012-09-29 09:55 | douggie_m | Note Edited: 0003093 | bug_revision_view_page.php?bugnote_id=3093#r1940 |
2012-09-29 10:24 | douggie_m | Note Added: 0003096 | |
2012-09-29 11:07 | Ivan | Status | assigned => resolved |
2012-09-29 11:07 | Ivan | Fixed in Version | => 0.9 |
2012-09-29 11:07 | Ivan | Resolution | open => fixed |
2014-05-30 17:41 | beegee | Status | resolved => closed |
Notes |
|
|
"on attempt to start new game", of course, I don't even get a list of maps (can't edit submitted issue).
When I did /usr/share/vcmi/Maps# mv Step\ by\ Step.h3m ../
I got the following:
Program received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf2b55450 (LWP 27098)]
0x1054c41c in SelectionTab::parseMaps (this=0x10d9c4a0, files=..., start=0, threads=1) at CPreGame.cpp:1052
1052 int read = stream->read(mapBuffer, 1500);
(gdb) p mapBuffer
$1 = "\016,\363\\\000\000\000\a\367\377\340\030\000\200\000\000\rǑ\304\362\265>\020\362\265T\260\r\307q,\362\265Vd\365\217\315h\365u\"@\r\340\237\364\365\200\000\020\362\265>\020\r\321J\334\r\336&\274\r\336&\214\r\336'\024\016\000\261`\000\000\000\000\000\000\000\000\362\065`\000\020\302\216\204\rಠ\016,\363\\\020\261\352\070\000\000\000\000\000\000\000\000\020\276\224p\000\000\000\000\000\000\004\000\000\000\004\000\r\340\262\\\000\000\004\b\r\340\262h\r\340\237\364\r\340\262h\362\265>\220\r\321)\360\000\000\000\201\000\000\000H\r\336+\274\000\000\004\030\000\000\004\000\r\336,\320\362\265>\260\r\336+\240\000\000\000\002\000\000\000\002\r\336+\274\000\000\000 \000\000\000\b\r\336,\320\r\340\240\254\r\336+\240\000\000\000)\000\000\000)\r\336+\274$\000D\"\000\000\000\000\000\000\000\000\362\065`\000\020\302\216\204\020\302\216p\016,\363\\\020\261\352\070", '\000' <repeats 15 times>, "\b\000\000\000\000\020\261\321h\020\273\324h\000\000\000"... |
|
|
|
When I left only VCMI_Tests_2011b.h3m, and then just added all for one.h3m, there was no segfault.
I suppose I should upload my Maps directory contents.
Also, I forgot backtrace:
(gdb) s
std::_Tuple_impl<0u, CInputStream*, std::default_delete<CInputStream> >::_M_head (this=0xf2b53d78) at /usr/include/c++/4.7/tuple:152
152 const _Head& _M_head() const { return _Base::_M_head(); }
(gdb) s
std::_Head_base<0u, CInputStream*, false>::_M_head (this=0xf2b53d78) at /usr/include/c++/4.7/tuple:104
104 const _Head& _M_head() const { return _M_head_impl; }
(gdb) s
std::unique_ptr<CInputStream, std::default_delete<CInputStream> >::operator-> (this=0xf2b53d78) at /usr/include/c++/4.7/bits/unique_ptr.h:213
213 }
(gdb) s
Program received signal SIGSEGV, Segmentation fault.
0x1054c41c in SelectionTab::parseMaps (this=0x1158ad58, files=..., start=0, threads=1) at CPreGame.cpp:1052
1052 int read = stream->read(mapBuffer, 1500);
(gdb) bt
#0 0x1054c41c in SelectionTab::parseMaps (this=0x1158ad58, files=..., start=0, threads=1) at CPreGame.cpp:1052
#1 0x1054d274 in SelectionTab::SelectionTab(CMenuScreen::EState, const boost::function<void(CMapInfo*)> &, CMenuScreen::EMultiMode) (this=0x1158ad58, Type=CMenuScreen::newGame, OnSelect=...,
MultiPlayer=CMenuScreen::SINGLE_PLAYER) at CPreGame.cpp:1143
0000002 0x1054889c in CSelectionScreen::CSelectionScreen (this=0x11547358, Type=CMenuScreen::newGame, MultiPlayer=CMenuScreen::SINGLE_PLAYER, Names=0x0) at CPreGame.cpp:599
0000003 0x105474a0 in CGPreGame::openSel (this=0xec100fb8, screenType=CMenuScreen::newGame, multi=CMenuScreen::SINGLE_PLAYER) at CPreGame.cpp:455
0000004 0x105abf24 in boost::_mfi::mf2<void, CGPreGame, CMenuScreen::EState, CMenuScreen::EMultiMode>::operator() (this=0x10b09360, p=0xec100fb8, a1=CMenuScreen::newGame, a2=CMenuScreen::SINGLE_PLAYER)
at /usr/include/boost/bind/mem_fn_template.hpp:280
0000005 0x105a3da0 in boost::_bi::list3<boost::_bi::value<CGPreGame*>, boost::_bi::value<CMenuScreen::EState>, boost::_bi::value<CMenuScreen::EMultiMode> >::operator()<boost::_mfi::mf2<void, CGPreGame, CMenuScreen::EState, CMenuScreen::EMultiMode>, boost::_bi::list0> (this=0x10b09368, f=..., a=...) at /usr/include/boost/bind/bind.hpp:392
0000006 0x10599428 in boost::_bi::bind_t<void, boost::_mfi::mf2<void, CGPreGame, CMenuScreen::EState, CMenuScreen::EMultiMode>, boost::_bi::list3<boost::_bi::value<CGPreGame*>, boost::_bi::value<CMenuScreen::EState>, boost::_bi::value<CMenuScreen::EMultiMode> > >::operator() (this=0x10b09360) at /usr/include/boost/bind/bind_template.hpp:20
0000007 0x1058bcfc in boost::detail::function::void_function_obj_invoker0<boost::_bi::bind_t<void, boost::_mfi::mf2<void, CGPreGame, CMenuScreen::EState, CMenuScreen::EMultiMode>, boost::_bi::list3<boost::_bi::value<CGPreGame*>, boost::_bi::value<CMenuScreen::EState>, boost::_bi::value<CMenuScreen::EMultiMode> > >, void>::invoke (function_obj_ptr=...) at /usr/include/boost/function/function_template.hpp:153
0000008 0x10267d3c in boost::function0<void>::operator() (this=0x108fe9a8) at /usr/include/boost/function/function_template.hpp:760
0000009 0x10268190 in CFunctionList<void ()>::operator()() const (this=0x11519a4c) at ./UIFramework/../FunctionList.h:62
0000010 0x10255bbc in CAdventureMapButton::clickLeft (this=0x115199f0, down=..., previousState=true) at ./UIFramework/CIntObjectClasses.cpp:335
0000011 0x10244024 in CGuiHandler::handleEvent (this=0x108e0444, sEvent=0xf2b54b98) at ./UIFramework/CGuiHandler.cpp:247
0000012 0x10243264 in CGuiHandler::handleEvents (this=0x108e0444) at ./UIFramework/CGuiHandler.cpp:140
0000013 0x10547bd8 in CGPreGame::update (this=0xec100fb8) at CPreGame.cpp:496
0000014 0x10244ca4 in CGuiHandler::run (this=0x108e0444) at ./UIFramework/CGuiHandler.cpp:348
0000015 0x104d3d0c in boost::_mfi::mf0<void, CGuiHandler>::operator() (this=0xec149974, t=...) at /usr/include/boost/bind/mem_fn_template.hpp:70
0000016 0x104d3a64 in boost::_bi::list1<boost::reference_wrapper<CGuiHandler> >::operator()<boost::_mfi::mf0<void, CGuiHandler>, boost::_bi::list0> (this=0xec14997c, f=..., a=...) at /usr/include/boost/bind/bind.hpp:253
0000017 0x104d3934 in boost::_bi::bind_t<void, boost::_mfi::mf0<void, CGuiHandler>, boost::_bi::list1<boost::reference_wrapper<CGuiHandler> > >::operator() (this=0xec149974) at /usr/include/boost/bind/bind_template.hpp:20
0000018 0x104d3060 in boost::detail::thread_data<boost::_bi::bind_t<void, boost::_mfi::mf0<void, CGuiHandler>, boost::_bi::list1<boost::reference_wrapper<CGuiHandler> > > >::run (this=0xec149870)
at /usr/include/boost/thread/detail/thread.hpp:62
0000019 0x0e2cf40c in ?? () from /usr/lib/libboost_thread.so.1.49.0
0000020 0x0dc557b0 in start_thread (arg=<optimized out>) at pthread_create.c:306
0000021 0x0dd7b930 in clone () at ../sysdeps/unix/sysv/linux/powerpc/powerpc32/clone.S:123
(gdb) quit |
|
|
(0003085)
|
Ivan
|
2012-09-29 09:21
|
|
With your maps crash is reproducible. Will check what's wrong. |
|
|
(0003087)
|
Ivan
|
2012-09-29 09:23
|
|
Myth and legends.h3m causes crash.
Removing this file should fix this. Now I need to figure out why VCMI can't load it... |
|
|
(0003089)
|
douggie_m
|
2012-09-29 09:28
(edited on: 2012-09-29 09:36) |
|
Not on my side. I did
/usr/share/vcmi# mv Maps/myth\ and\ legend.h3m Maps\ \(Disabled\)/
And still got SIGSEGV (with all other maps kept), mapBuffer is still the same as in topic post:
(gdb) p mapBuffer
$1 = "\025\000\000\000\001H\000\000\000\001\f\000\000\000Step by Step\214\000\000\000A harsh winter has separated what once was your kingdom. Now that the winter is over, it is time to take your kingdom back, step by step. \001\000\001\001\000\377\001\001\001\001\377\003\a\000\000\377\000\000\000\000\000\001\001\000\377\001\001\001\001\377\003\005\001\000\377\000\000\000\000\000"...
UPD: By the way, myth\ and\ legend.h3m is from LOKI, but gzipped manually by myself some time ago.
|
|
|
(0003090)
|
Ivan
|
2012-09-29 09:33
|
|
You moved it into subdirectory? Right now VCMI will parse all subdirectories as well so this map still will be parsed and will crash again. |
|
|
|
No, 'Maps (Disabled)' is in /usr/share/vcmi as well as 'Maps', and not in a subdir of Maps. |
|
|
(0003092)
|
Ivan
|
2012-09-29 09:44
|
|
Ah. Too many slashes. FYI - typing " before file name won't broke autocomplete and will give more readable commands.
Check rev 2947 - it should fix loading of myth and legends and will print file name of broken map |
|
|
(0003093)
|
douggie_m
|
2012-09-29 09:48
(edited on: 2012-09-29 09:55) |
|
Maybe 'all for one.h3m' is the cause (maybe because it is uncompressed).
When it is used with any other gzipped map.
/usr/share/vcmi# ls -l Maps
total 144
-rw-rw-r-- 1 root root 130076 Sep 20 14:04 all for one.h3m
-rw-rw-r-- 1 root root 16092 Aug 11 12:25 ascension.h3m
Segfaults too.
But the same 'all for one.h3m' left alone together with 'VCMI_Tests_2011b.h3m' loads perfectly.
UPD: no, moving out 'all for one.h3m' together with 'myth and legend.h3m' doesn't help.
It's magic.
|
|
|
|
|
|
|
With rev2947, issue is resolved fixed. |
|