mudlet-makers team mailing list archive
-
mudlet-makers team
-
Mailing list archive
-
Message #04048
[Bug 1263447] Re: Crash on pathfinding using unconnected maps
Oh that is nasty!
I think I may have exposed some dodgy code with a recent commit if http://forums.mudlet.org/viewtopic.php?f=13&t=1696&p=23021#p23021 is anything to go on. However I think I have found the problem,
in (bool)TMap::findPath( int from, int to ) there is the following pair of lines:
vertex start = roomidToIndex[from];
vertex goal = roomidToIndex[to];
However if either from or to are locked rooms they will not make it into TMap::<int, int> roomidToIndex but those lines use the operator[]() WHICH AS THE QT DOCUMENTATION NOTES:
"In general, we recommend that you use contains() and value() rather than operator[]() for looking up a key in a map. The reason is that operator[]() silently inserts an item into the map if no item exists with the same key (unless the map is const)."
In this case "from" or "to" will get inserted into the graph, with a
value of 0 - which corresponds to the FIRST room that was inserted into
the BGL graph by TMap::initGraph(); either that will exist but IS A
WRONG VALUE FOR THE AStar routine to use - or, if the graph is empty
because EVERY room is locked there is not even a zero indexed value in
an empty graph and the AStar routine will crash and die when it tries to
look up the value in the graph - which is what Chris Leacy has found
with his provided torilmap.zip test case.
--
You received this bug notification because you are a member of Mudlet
Makers, which is subscribed to Mudlet.
https://bugs.launchpad.net/bugs/1263447
Title:
Crash on pathfinding using unconnected maps
Status in Mudlet:
Confirmed
Bug description:
Import the sample map with rooms 1,2 which area in area 1 and are not
connected. Then try to do getPath(1,2) - a crash happens.
This happens on Mudlet 2.1, Chris7/Mudlet2/mudletDev and SF master.
mudletDev backtrace:
0 astar_search<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float> >, distance_heuristic<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float> >, float, std::vector<location> >, astar_goal_visitor<unsigned long>, unsigned long*, boost::shared_array_property_map<float, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> >, float*, boost::adj_list_edge_property_map<boost::directed_tag, float, float const&, unsigned long, boost::property<boost::edge_weight_t, float> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::shared_array_property_map<boost::default_color_type, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> >, std::less<float>, boost::closed_plus<float>, float, float> astar_search.hpp 294 0x5f5b4a
1 boost::astar_search<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float, boost::no_property>, boost::no_property, boost::listS>, distance_heuristic<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float, boost::no_property>, boost::no_property, boost::listS>, float, std::vector<location, std::allocator<location> > >, astar_goal_visitor<unsigned long>, boost::graph_visitor_t, boost::bgl_named_params<float*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > astar_search.hpp 329 0x5f5b4a
2 TMap::findPath TMap.cpp 771 0x5ef6f3
3 TLuaInterpreter::getPath TLuaInterpreter.cpp 4221 0x4de665
4 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c23c
5 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff7986c7b
6 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c64d
7 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797b8d7
8 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c802
9 lua_pcall /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff7978361
10 TLuaInterpreter::call TLuaInterpreter.cpp 10178 0x4ef23d
11 TAlias::execute TAlias.cpp 426 0x529368
12 TAlias::match TAlias.cpp 275 0x52a553
13 TAlias::match TAlias.cpp 284 0x529bfe
14 AliasUnit::processDataStream AliasUnit.cpp 281 0x537754
15 Host::send Host.cpp 638 0x45ca9c
16 TCommandLine::enterCommand TCommandLine.cpp 522 0x51dd5c
17 TCommandLine::event TCommandLine.cpp 236 0x51f413
18 QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/vadi/Programs/Qt5.2.0/5.2.0/gcc_64/lib/libQt5Widgets.so.5 0x7ffff644ef34
19 QApplication::notify(QObject*, QEvent*) /home/vadi/Programs/Qt5.2.0/5.2.0/gcc_64/lib/libQt5Widgets.so.5 0x7ffff6452cfe
20 QCoreApplication::notifyInternal(QObject*, QEvent*) /home/vadi/Programs/Qt5.2.0/5.2.0/gcc_64/lib/libQt5Core.so.5 0x7ffff54eb554
... <More>
master backtrace:
0 put<float, float> property_map.hpp 176 0x5f14e5
1 astar_search<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float> >, distance_heuristic<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float> >, float, std::vector<location> >, astar_goal_visitor<unsigned long>, unsigned long*, boost::shared_array_property_map<float, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> >, float*, boost::adj_list_edge_property_map<boost::directed_tag, float, float const&, unsigned long, boost::property<boost::edge_weight_t, float> const, boost::edge_weight_t>, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long>, boost::shared_array_property_map<boost::default_color_type, boost::vec_adj_list_vertex_id_map<boost::no_property, unsigned long> >, std::less<float>, boost::closed_plus<float>, float, float> astar_search.hpp 294 0x5f14e5
2 boost::astar_search<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float, boost::no_property>, boost::no_property, boost::listS>, distance_heuristic<boost::adjacency_list<boost::listS, boost::vecS, boost::directedS, boost::no_property, boost::property<boost::edge_weight_t, float, boost::no_property>, boost::no_property, boost::listS>, float, std::vector<location, std::allocator<location> > >, astar_goal_visitor<unsigned long>, boost::graph_visitor_t, boost::bgl_named_params<float*, boost::vertex_distance_t, boost::bgl_named_params<unsigned long*, boost::vertex_predecessor_t, boost::no_property> > > astar_search.hpp 329 0x5f14e5
3 TMap::findPath TMap.cpp 751 0x5eb0bd
4 TLuaInterpreter::getPath TLuaInterpreter.cpp 4133 0x4daee7
5 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c23c
6 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff7986c7b
7 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c64d
8 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797b8d7
9 ?? /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff797c802
10 lua_pcall /usr/lib/x86_64-linux-gnu/liblua5.1.so.0 0x7ffff7978361
11 TLuaInterpreter::call TLuaInterpreter.cpp 10111 0x4eae3d
12 TAlias::execute TAlias.cpp 426 0x5250b8
13 TAlias::match TAlias.cpp 275 0x5262a3
14 TAlias::match TAlias.cpp 284 0x52594e
15 AliasUnit::processDataStream AliasUnit.cpp 281 0x5334a4
16 Host::send Host.cpp 636 0x45c65c
17 TCommandLine::enterCommand TCommandLine.cpp 522 0x519aac
18 TCommandLine::event TCommandLine.cpp 236 0x51b163
19 QApplicationPrivate::notify_helper(QObject*, QEvent*) /home/vadi/Programs/Qt5.2.0/5.2.0/gcc_64/lib/libQt5Widgets.so.5 0x7ffff644ef34
20 QApplication::notify(QObject*, QEvent*) /home/vadi/Programs/Qt5.2.0/5.2.0/gcc_64/lib/libQt5Widgets.so.5 0x7ffff6452cfe
... <More>
To manage notifications about this bug go to:
https://bugs.launchpad.net/mudlet/+bug/1263447/+subscriptions
References