Opened 18 years ago

Closed 18 years ago

#261 closed Bugs (Fixed)

Dereferencing invalid iterator

Reported by: nobody Owned by: jsiek
Milestone: Component: graph
Version: None Severity:
Keywords: Cc:

Description

boost 1.31.0, subgraph.hpp, line 179, function 
find_vertex(vertex_descriptor u_global) const;

return std::make_pair((*i).second, i != 
m_local_vertex.end()); //if i == m_local_vertex.end() - 
iterator should not be dereferenced

Change History (3)

comment:1 by Vladimir Prus, 18 years ago

Logged In: YES 
user_id=321498

I think it's a bug indeed. I've fixed it locally, but before comitting I'd like 
to add a test. Could you provide a minimal example which fails/crashes 
unless this is fixed? 
 

comment:2 by parakhin, 18 years ago

Logged In: YES 
user_id=1033441

Well, actually you can only make it crash consistently building 
with STLPort with _STLP_DEBUG macro defined - only then 
dereferencing invalid iterator is checked. In all other cases it 
may crush - or it may not (coz dereferencing an invalid 
iterator causes an undefined behavior)

#define _STLP_DEBUG

#include <boost/config.hpp>
#include <iostream>
#include <boost/graph/subgraph.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/graph_utility.hpp>


int main(int,char*[])
{
  using namespace boost;
  typedef adjacency_list_traits<vecS, vecS, directedS> Traits;
  typedef subgraph< adjacency_list<vecS, vecS, directedS,
    property<vertex_color_t, int>, property<edge_index_t, 
int> > > Graph;

  const int N = 6;
  Graph G0(N);
  enum { A, B, C, D, E, F};
  Graph& G1 = G0.create_subgraph();
  add_vertex(C, G1);    
  G1.find_vertex(78);
  return 0;
}

comment:3 by Douglas Gregor, 18 years ago

Status: assignedclosed
Logged In: YES 
user_id=249098

This bug has been fixed in 1.32.0: confirmed with libstdc++ debug mode. 
Note: See TracTickets for help on using tickets.