diff --git a/ChangeLog b/ChangeLog index 2ccb8a3b1..402ccc1bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2004-11-08 Alexandre Duret-Lutz + * src/tgbaparse/tgbaparse.yy: Add `%destructor's so the parser + does not leak on errors. + * src/tgbatest/ltl2tgba.cc: Free the automata if it could not be + fully parsed. + * src/tgbaalgos/gtec/ce.cc (couvreur99_check_result::accepting_run): Remove spurious FIXME. diff --git a/src/tgbaparse/tgbaparse.yy b/src/tgbaparse/tgbaparse.yy index 81e6232a4..7b2802c20 100644 --- a/src/tgbaparse/tgbaparse.yy +++ b/src/tgbaparse/tgbaparse.yy @@ -1,4 +1,4 @@ -/* Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6), +/* Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6), ** département Systèmes Répartis Coopératifs (SRC), Université Pierre ** et Marie Curie. ** @@ -63,6 +63,15 @@ typedef std::pair pair; %type acc_list %token ACC_DEF +%destructor { delete $$; } STRING UNTERMINATED_STRING IDENT strident string +%destructor { spot::ltl::destroy($$); } condition +%destructor { + for (std::list::iterator i = $$->begin(); + i != $$->end(); ++i) + spot::ltl::destroy(*i); + delete $$; + } acc_list + %% tgba: acceptance_decl lines | lines; diff --git a/src/tgbatest/ltl2tgba.cc b/src/tgbatest/ltl2tgba.cc index d08cedeff..6ab85dac0 100644 --- a/src/tgbatest/ltl2tgba.cc +++ b/src/tgbatest/ltl2tgba.cc @@ -410,7 +410,11 @@ main(int argc, char** argv) spot::tgba_explicit* e; to_free = a = e = spot::tgba_parse(input, pel, dict, env, debug_opt); if (spot::format_tgba_parse_errors(std::cerr, pel)) - return 2; + { + delete to_free; + delete dict; + return 2; + } e->merge_transitions(); } else