Catch exception in replaceEnvironmentPath

This exception in the regex constructor is only theoretical (our regex
are hardcoded), but this is creating coverity noise.

Additionally, revert the following commits that are not needed anymore:
6b6fa94c: Catch exceptions to please coverity
c2ed75fd: Fixup 6b6fa94c: coverity says there are more possible exceptions.

This commit is better viewed with 'git show -b'.
This commit is contained in:
Jean-Marc Lasgouttes 2018-06-04 10:51:11 +02:00
parent 08afacc239
commit 32f37250d5
3 changed files with 46 additions and 47 deletions

View File

@ -471,45 +471,39 @@ void LyX::earlyExit(int status)
int LyX::init(int & argc, char * argv[])
{
try {
// check for any spurious extra arguments
// other than documents
for (int argi = 1; argi < argc ; ++argi) {
if (argv[argi][0] == '-') {
lyxerr << to_utf8(
bformat(_("Wrong command line option `%1$s'. Exiting."),
from_utf8(os::utf8_argv(argi)))) << endl;
return EXIT_FAILURE;
}
}
// Initialization of LyX (reads lyxrc and more)
LYXERR(Debug::INIT, "Initializing LyX::init...");
bool success = init();
LYXERR(Debug::INIT, "Initializing LyX::init...done");
if (!success)
return EXIT_FAILURE;
// Remaining arguments are assumed to be files to load.
for (int argi = 1; argi < argc; ++argi)
pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
if (!use_gui && pimpl_->files_to_load_.empty()) {
lyxerr << to_utf8(_("Missing filename for this operation.")) << endl;
// check for any spurious extra arguments
// other than documents
for (int argi = 1; argi < argc ; ++argi) {
if (argv[argi][0] == '-') {
lyxerr << to_utf8(
bformat(_("Wrong command line option `%1$s'. Exiting."),
from_utf8(os::utf8_argv(argi)))) << endl;
return EXIT_FAILURE;
}
}
if (first_start) {
pimpl_->files_to_load_.push_back(
i18nLibFileSearch("examples", "splash.lyx").absFileName());
}
// Initialization of LyX (reads lyxrc and more)
LYXERR(Debug::INIT, "Initializing LyX::init...");
bool success = init();
LYXERR(Debug::INIT, "Initializing LyX::init...done");
if (!success)
return EXIT_FAILURE;
return EXIT_SUCCESS;
// Remaining arguments are assumed to be files to load.
for (int argi = 1; argi < argc; ++argi)
pimpl_->files_to_load_.push_back(os::utf8_argv(argi));
} catch (exception const &e) {
// This can happen _in_theory_ in replaceEnvironmentPath
lyxerr << "Caught exception `" << e.what() << "'." << endl;
if (!use_gui && pimpl_->files_to_load_.empty()) {
lyxerr << to_utf8(_("Missing filename for this operation.")) << endl;
return EXIT_FAILURE;
}
if (first_start) {
pimpl_->files_to_load_.push_back(
i18nLibFileSearch("examples", "splash.lyx").absFileName());
}
return EXIT_SUCCESS;
}

View File

@ -1067,10 +1067,7 @@ Server::~Server()
string message;
for (int i = 0; i != numclients_; ++i) {
message = "LYXSRV:" + clients_[i] + ":bye\n";
// ignore exceptions, we are quitting anyway
try {
pipes_.send(message);
} catch (...) {}
pipes_.send(message);
}
}

View File

@ -686,19 +686,27 @@ string const replaceEnvironmentPath(string const & path)
// $[A-Za-z_][A-Za-z_0-9]*
static string const envvar = "[$]([A-Za-z_][A-Za-z_0-9]*)";
static regex const envvar_br_re("(.*)" + envvar_br + "(.*)");
static regex const envvar_re("(.*)" + envvar + "(.*)");
string result = path;
while (1) {
smatch what;
if (!regex_match(result, what, envvar_br_re)) {
if (!regex_match(result, what, envvar_re))
break;
// Coverity thinks that the regex constructor can return an
// exception. We know that it is not true since our regex are
// hardcoded, but we have to protect against that nevertheless.
try {
static regex const envvar_br_re("(.*)" + envvar_br + "(.*)");
static regex const envvar_re("(.*)" + envvar + "(.*)");
string result = path;
while (1) {
smatch what;
if (!regex_match(result, what, envvar_br_re)) {
if (!regex_match(result, what, envvar_re))
break;
}
string env_var = getEnv(what.str(2));
result = what.str(1) + env_var + what.str(3);
}
string env_var = getEnv(what.str(2));
result = what.str(1) + env_var + what.str(3);
return result;
} catch (exception const & e) {
LYXERR0("Something is very wrong: " << e.what());
return path;
}
return result;
}