From 2da20e8d286977b7d47cbd73655ac08cbe521368 Mon Sep 17 00:00:00 2001 From: Cary R Date: Thu, 29 Apr 2010 18:21:13 -0700 Subject: [PATCH] Don't free a NULL iterator in $dumpvars. This patch fixes two places where Icarus under certain conditions would try to free a NULL iterator value in $dumpvars(). $dumpvars() can have a NULL argument to indicate that all variables should be dumped. Under two error conditions the code was trying to free this NULL argument reference. The standard does not define if vpi_free_object() can support a NULL reference. Icarus does not currently allow it (it asserts). --- vpi/sys_lxt.c | 4 ++-- vpi/sys_lxt2.c | 4 ++-- vpi/sys_vcd.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/vpi/sys_lxt.c b/vpi/sys_lxt.c index 1fadd3945..29b4d0cf0 100644 --- a/vpi/sys_lxt.c +++ b/vpi/sys_lxt.c @@ -730,13 +730,13 @@ static PLI_INT32 sys_dumpvars_calltf(PLI_BYTE8*name) if (dump_file == 0) { open_dumpfile(callh); if (dump_file == 0) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; } } if (install_dumpvars_callback()) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; } diff --git a/vpi/sys_lxt2.c b/vpi/sys_lxt2.c index e8c36e219..2b89d96c4 100644 --- a/vpi/sys_lxt2.c +++ b/vpi/sys_lxt2.c @@ -785,13 +785,13 @@ static PLI_INT32 sys_dumpvars_calltf(PLI_BYTE8*name) if (dump_file == 0) { open_dumpfile(callh); if (dump_file == 0) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; } } if (install_dumpvars_callback()) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; } diff --git a/vpi/sys_vcd.c b/vpi/sys_vcd.c index 027c89817..9e044e462 100644 --- a/vpi/sys_vcd.c +++ b/vpi/sys_vcd.c @@ -755,13 +755,13 @@ static PLI_INT32 sys_dumpvars_calltf(PLI_BYTE8*name) if (dump_file == 0) { open_dumpfile(callh); if (dump_file == 0) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; } } if (install_dumpvars_callback()) { - vpi_free_object(argv); + if (argv) vpi_free_object(argv); return 0; }