Do not use lyxerr in from_ascii(char const *)

This function is used a lot to initialize static docstrings. This is
an issue in theory because lyxerr may not have been initialized in
time.

In practice of course, lyxerr will only be used when there is a
non-ascii character in the parameter, which is really not supposed to
happen.

This gets rid of 75 coverity reports.
This commit is contained in:
Jean-Marc Lasgouttes 2024-09-09 12:08:23 +02:00
parent f725abea05
commit ed291f0d4f
3 changed files with 18 additions and 1 deletions

View File

@ -40,7 +40,7 @@ docstring const from_ascii(char const * ascii)
char_type *d = &s[0];
while (--n >= 0) {
d[n] = ascii[n];
LATTEST(static_cast<unsigned char>(ascii[n]) < 0x80);
LATTEST_STATIC(static_cast<unsigned char>(ascii[n]) < 0x80);
}
}
return s;

View File

@ -22,6 +22,7 @@
#include <boost/assert.hpp>
#include <iostream>
#ifdef LYX_CALLSTACK_PRINTING
#include <cstdio>
@ -55,6 +56,13 @@ void doAssert(char const * expr, char const * file, long line)
}
void doAssertStatic(char const * expr, char const * file, long line)
{
cerr << "ASSERTION " << expr << " VIOLATED IN " << file << ":" << line << endl;
BOOST_ASSERT(false);
}
docstring formatHelper(docstring const & msg,
char const * expr, char const * file, long line)
{

View File

@ -34,6 +34,11 @@ LATTEST(expr)
continue with the usual program flow, but failure of expr still means that
there is something that needs to be fixed.
LATTEST_STATIC(expr)
This is the same as macro LATTEST above, except
that it does not use lyxerr, so that it is suitable in static
variables initialization.
LASSERT(expr, escape)
This macro should be used when a failure of expr is not compatible with
continuing the ordinary program flow, but is something from which we can
@ -61,6 +66,7 @@ LAPPERR(expr)
void doAssert(char const * expr, char const * file, long line);
void doAssertStatic(char const * expr, char const * file, long line);
void doWarnIf(char const * expr, char const * file, long line);
void doBufErr(char const * expr, char const * file, long line);
void doAppErr(char const * expr, char const * file, long line);
@ -76,6 +82,9 @@ docstring printCallStack();
#define LATTEST(expr) \
if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); }
#define LATTEST_STATIC(expr) \
if (expr) {} else { lyx::doAssertStatic(#expr, __FILE__, __LINE__); }
#define LASSERT(expr, escape) \
if (expr) {} else { lyx::doAssert(#expr, __FILE__, __LINE__); escape; }