bin: handle any exception before returning from parse_opt()
On some architectures (e.g., ARM, or even some -flto setups on Intel) C++ exceptions to not traverse the C functions. So even if the C++ main() has a try/catch, it will not catch the exception thrown by C++ code called from the argp module (which is compiled in C). * bin/common_setup.cc, bin/common_setup.hh: Define some macros and function to factorize exception handling. * bin/autcross.cc, bin/autfilt.cc, bin/common_aoutput.cc, bin/common_color.cc, bin/common_finput.cc, bin/common_hoaread.cc, bin/common_output.cc, bin/common_post.cc, bin/common_trans.cc, bin/dstar2tgba.cc, bin/genaut.cc, bin/genltl.cc, bin/ltl2tgba.cc, bin/ltl2tgta.cc, bin/ltlcross.cc, bin/ltldo.cc, bin/ltlfilt.cc, bin/ltlgrind.cc, bin/ltlsynt.cc, bin/randaut.cc, bin/randltl.cc: Protect all parse_opt() functions, even those where there is currently no exception risk.
This commit is contained in:
parent
74ceea89ee
commit
d523ce8ba4
23 changed files with 104 additions and 19 deletions
|
|
@ -1,6 +1,6 @@
|
|||
// -*- coding: utf-8 -*-
|
||||
// Copyright (C) 2015 Laboratoire de Recherche et Développement de
|
||||
// l'Epita (LRDE).
|
||||
// Copyright (C) 2015, 2019 Laboratoire de Recherche et Développement
|
||||
// de l'Epita (LRDE).
|
||||
//
|
||||
// This file is part of Spot, a model checking library.
|
||||
//
|
||||
|
|
@ -18,6 +18,7 @@
|
|||
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#include "common_hoaread.hh"
|
||||
#include "common_setup.hh"
|
||||
#include "argmatch.h"
|
||||
#include "error.h"
|
||||
|
||||
|
|
@ -72,6 +73,8 @@ static bool parse_bool(const char* opt, const char* arg)
|
|||
static int
|
||||
parse_opt_hoaread(int key, char* arg, struct argp_state*)
|
||||
{
|
||||
// Called from C code, so should not raise any exception.
|
||||
BEGIN_EXCEPTION_PROTECT;
|
||||
// This switch is alphabetically-ordered.
|
||||
switch (key)
|
||||
{
|
||||
|
|
@ -81,6 +84,7 @@ parse_opt_hoaread(int key, char* arg, struct argp_state*)
|
|||
default:
|
||||
return ARGP_ERR_UNKNOWN;
|
||||
}
|
||||
END_EXCEPTION_PROTECT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue