Attempt to fix the heap-use-after-free error in mst_kruskal
For some reason the edges ware removed in one direction resulting in e->reverse point into invalid memory. Do not insert edge into edge_weight_tree if not needed.
This commit is contained in:
parent
06d4eac9ac
commit
5f6613e36f
1 changed files with 13 additions and 5 deletions
14
src/edge.c
14
src/edge.c
|
@ -81,13 +81,21 @@ void free_edge(edge_t *e) {
|
|||
}
|
||||
|
||||
void edge_add(edge_t *e) {
|
||||
splay_insert(edge_weight_tree, e);
|
||||
splay_insert(e->from->edge_tree, e);
|
||||
|
||||
if (splay_insert(e->from->edge_tree, e)) {
|
||||
e->reverse = lookup_edge(e->to, e->from);
|
||||
|
||||
if(e->reverse)
|
||||
e->reverse->reverse = e;
|
||||
|
||||
if (!splay_insert(edge_weight_tree, e))
|
||||
logger(DEBUG_ALWAYS, LOG_ERR,
|
||||
"%s:%d: edge from: %s to: %s exists in edge_weight_tree",
|
||||
__FUNCTION__, __LINE__, e->from->name, e->to->name);
|
||||
} else {
|
||||
logger(DEBUG_ALWAYS, LOG_ERR,
|
||||
"%s:%d: edge from: %s to: %s exists in e->from->edge_tree",
|
||||
__FUNCTION__, __LINE__, e->from->name, e->to->name);
|
||||
}
|
||||
}
|
||||
|
||||
void edge_del(edge_t *e) {
|
||||
|
|
Loading…
Reference in a new issue