From efc5f8d917ebf3d96027ae7dddf64b244e7c7e20 Mon Sep 17 00:00:00 2001 From: Riccardo Schirone Date: Mon, 26 Oct 2015 14:39:54 +0100 Subject: [PATCH] core/graph: fix segfault when returned list has length 0 --- libr/core/graph.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/libr/core/graph.c b/libr/core/graph.c index d6997f964e..b55c1b38ea 100644 --- a/libr/core/graph.c +++ b/libr/core/graph.c @@ -1404,17 +1404,21 @@ static void analyze_back_edges (const RAGraph *g, RANode *an) { e->y = r_list_new (); tp = r_graph_get_neighbours (g->graph, ak->gnode); - fn = r_list_get_bottom (tp); - ln = r_list_get_top (tp); - first = get_anode (fn); - last = get_anode (ln); + if (r_list_length (tp) > 0) { + fn = r_list_get_bottom (tp); + ln = r_list_get_top (tp); + first = get_anode (fn); + last = get_anode (ln); - if (first == an) { - r_list_append (e->x, (void *)(size_t)(an->x - 2 - j)); - r_list_append (e->y, (void *)(size_t)ak->y); - } else { - r_list_append (e->x, (void *)(size_t)(last->x + last->w + 2 + j)); - r_list_append (e->y, (void *)(size_t)ak->y); + if (first == an) { + r_list_append (e->x, + (void *)(size_t)(an->x - 2 - j)); + r_list_append (e->y, (void *)(size_t)ak->y); + } else { + r_list_append (e->x, + (void *)(size_t)(last->x + last->w + 2 + j)); + r_list_append (e->y, (void *)(size_t)ak->y); + } } r_list_append (g->edges, e); j++;