← Back to team overview

mudlet-makers team mailing list archive

[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