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

_______________________________________________
Mailing list: https://launchpad.net/~mudlet-makers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~mudlet-makers
More help   : https://help.launchpad.net/ListHelp

Reply via email to