]> granicus.if.org Git - graphviz/commitdiff
Attempted fix to bug 1485, agedge has memory access violation
authornorth <devnull@localhost>
Mon, 20 Oct 2008 14:49:07 +0000 (14:49 +0000)
committernorth <devnull@localhost>
Mon, 20 Oct 2008 14:49:07 +0000 (14:49 +0000)
when search for an edge that does not exist in a subgraph.

lib/cgraph/edge.c

index 756f25eacf9633d77511713056744aaa3b291447..22bb3bd3b7d4c4a5ed6c46082ae466c2008e962d 100644 (file)
@@ -111,14 +111,17 @@ static Agedge_t *agfindedge_by_key(Agraph_t * g, Agnode_t * t, Agnode_t * h,
     template.base.tag = key;
     template.node = t;         /* guess that fan-in < fan-out */
     sn = agsubrep(g, h);
-    if (t != h) {
-       dtrestore(g->e_id, sn->in_id);
-       e = (Agedge_t *) dtsearch(g->e_id, &template);
-       sn->in_id = dtextract(g->e_id);
-    } else {                   /* self edge */
-       dtrestore(g->e_id, sn->out_id);
-       e = (Agedge_t *) dtsearch(g->e_id, &template);
-       sn->out_id = dtextract(g->e_id);
+    if (!sn) e = 0;
+    else {
+       if (t != h) {
+           dtrestore(g->e_id, sn->in_id);
+           e = (Agedge_t *) dtsearch(g->e_id, &template);
+           sn->in_id = dtextract(g->e_id);
+       } else {                        /* self edge */
+           dtrestore(g->e_id, sn->out_id);
+           e = (Agedge_t *) dtsearch(g->e_id, &template);
+           sn->out_id = dtextract(g->e_id);
+       }
     }
     return e;
 }