Do not access e->to->prevedge if not defined
authorthorkill <thkr@hannover.ccc.de>
Sun, 19 Jul 2015 16:53:29 +0000 (18:53 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 19 Jul 2015 20:33:43 +0000 (22:33 +0200)
In some cases - mostly when e->to == myself the prevedge is set to NULL,
causing invalid memory access. In rare cases this may lead to malformed mst
or segfaults.

src/graph.c

index 49161c1..56ebb61 100644 (file)
@@ -173,7 +173,7 @@ static void sssp_bfs(void) {
 
                        if(e->to->status.visited
                           && (!e->to->status.indirect || indirect)
-                          && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight))
+                          && (e->to->prevedge && (e->to->distance != n->distance + 1 || e->weight >= e->to->prevedge->weight)))
                                continue;
 
                        // Only update nexthop if it doesn't increase the path length