From f453a6138d313a70fba47b5453186e5ec6e2aa6f Mon Sep 17 00:00:00 2001 From: tmeissner Date: Fri, 21 Aug 2015 19:42:23 +0200 Subject: [PATCH] Fix various null pointer accesses In procedure was a bug regarding the test of the position of the founded key/value pair. Because of this bug, a segmentation fault happened when deallocationg the key/value pair. This is fixed now by checking both neighbor entries for null --- sim/DictP.vhd | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/sim/DictP.vhd b/sim/DictP.vhd index c3711dc..026bf93 100644 --- a/sim/DictP.vhd +++ b/sim/DictP.vhd @@ -57,7 +57,7 @@ package body DictP is v_entry.key := new string'(key); v_entry.data := new std_logic_vector'(data); v_entry.last_entry := v_head; - v_entry.next_entry := v_entry; + v_entry.next_entry := null; v_head := v_entry; v_head.last_entry.next_entry := v_head; else @@ -65,7 +65,7 @@ package body DictP is v_head.key := new string'(key); v_head.data := new std_logic_vector'(data); v_head.last_entry := null; - v_head.next_entry := v_entry; + v_head.next_entry := null; end if; if (v_logging) then report t_dict'instance_name & ": Add key " & key & " with data 0x" & to_hstring(data); @@ -98,14 +98,15 @@ package body DictP is begin if (v_entry /= null) then -- remove head entry - if(v_entry.next_entry = null) then + if(v_entry.next_entry = null and v_entry.last_entry /= null) then v_entry.last_entry.next_entry := null; - v_head := v_entry.last_entry; + v_head := v_entry.last_entry; -- remove start entry - elsif(v_entry.last_entry = null) then + elsif(v_entry.next_entry /= null and v_entry.last_entry = null) then v_entry.next_entry.last_entry := null; - -- remove entry between - else + v_entry.next_entry.last_entry := v_entry.last_entry; + -- remove from between + elsif(v_entry.next_entry /= null and v_entry.last_entry /= null) then v_entry.last_entry.next_entry := v_entry.next_entry; v_entry.next_entry.last_entry := v_entry.last_entry; end if;