2
0
mirror of https://github.com/boostorg/graph.git synced 2026-02-27 17:12:11 +00:00

Fixed buffer overflow from parallel edges in isomorphism(); fixes #5175

[SVN r68979]
This commit is contained in:
Jeremiah Willcock
2011-02-17 23:00:20 +00:00
parent a0c90983ab
commit d44293d8a8

View File

@@ -284,18 +284,30 @@ namespace boost {
typedef size_type result_type;
degree_vertex_invariant(const InDegreeMap& in_degree_map, const Graph& g)
: m_in_degree_map(in_degree_map), m_g(g) { }
: m_in_degree_map(in_degree_map),
m_max_vertex_in_degree(0),
m_max_vertex_out_degree(0),
m_g(g) {
BGL_FORALL_VERTICES_T(v, g, Graph) {
m_max_vertex_in_degree =
(std::max)(m_max_vertex_in_degree, get(m_in_degree_map, v));
m_max_vertex_out_degree =
(std::max)(m_max_vertex_out_degree, out_degree(v, g));
}
}
size_type operator()(vertex_t v) const {
return (num_vertices(m_g) + 1) * out_degree(v, m_g)
return (m_max_vertex_in_degree + 1) * out_degree(v, m_g)
+ get(m_in_degree_map, v);
}
// The largest possible vertex invariant number
size_type max BOOST_PREVENT_MACRO_SUBSTITUTION () const {
return num_vertices(m_g) * num_vertices(m_g) + num_vertices(m_g);
return (m_max_vertex_in_degree + 2) * m_max_vertex_out_degree + 1;
}
private:
InDegreeMap m_in_degree_map;
size_type m_max_vertex_in_degree;
size_type m_max_vertex_out_degree;
const Graph& m_g;
};