From: north Date: Mon, 20 Oct 2008 14:49:07 +0000 (+0000) Subject: Attempted fix to bug 1485, agedge has memory access violation X-Git-Tag: LAST_LIBGRAPH~32^2~3065 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bee3de5a73fac8819834a9ece3767a9c07f0fc02;p=graphviz Attempted fix to bug 1485, agedge has memory access violation when search for an edge that does not exist in a subgraph. --- diff --git a/lib/cgraph/edge.c b/lib/cgraph/edge.c index 756f25eac..22bb3bd3b 100644 --- a/lib/cgraph/edge.c +++ b/lib/cgraph/edge.c @@ -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; }