From ec37898fb10dfa2a5ed046a5f59fcefa3528a857 Mon Sep 17 00:00:00 2001 From: "John M. Penn" Date: Thu, 3 Mar 2016 17:38:41 -0600 Subject: [PATCH] Fix memory leaks in CheckpointAgent input parser. refs #154 --- .../sim_services/CheckPointAgent/input_parser.y | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/trick_source/sim_services/CheckPointAgent/input_parser.y b/trick_source/sim_services/CheckPointAgent/input_parser.y index 531908e0..7ed44efd 100644 --- a/trick_source/sim_services/CheckPointAgent/input_parser.y +++ b/trick_source/sim_services/CheckPointAgent/input_parser.y @@ -121,6 +121,7 @@ declaration: TYPE name_list ';' { } for ( i = 0 ; i < $2.num_vars ; i++ ) { free($2.var_declare[i].dim_list) ; + free($2.var_declare[i].name) ; } free($2.var_declare) ; } @@ -141,7 +142,8 @@ declaration: TYPE name_list ';' { } free( $1 ) ; for ( i = 0 ; i < $2.num_vars ; i++ ) { - free($2.var_declare[i].dim_list) ; + free($2.var_declare[i].dim_list) ; + free($2.var_declare[i].name) ; } free($2.var_declare) ; } @@ -230,11 +232,13 @@ trick_funcs: ECHO_ON ';' { ss << "Checkpoint Agent INFO: DEBUG_LEVEL set to " << debug_level << "." << std::endl; message_publish( MSG_INFO, ss.str().c_str() ); } + free( $1 ) ; } - | NAME '(' ')' ';' { + | NAME '(' ')' ';' { if (strcmp("clear_all_vars",$1) == 0) { IP->mem_mgr->clear_all_vars(); } + free( $1 ) ; } ; @@ -288,6 +292,11 @@ assignment: reference assignment_item ';' { IP->bad_assignment_count ++; } delete_v_tree($2); + + // Free the ATTRIBUTES created by ref_var(). + if ($1.attr) { + free($1.attr); + } } assignment_item: v_data {