Avoid recursion when validating a macro that is defined recursively.
This avoids a crash but the latex engine will choke on it, of course.
This commit is contained in:
Enrico Forestieri 2023-01-27 20:34:24 +01:00
parent 168af93020
commit 16e67d4ebb

View File

@ -988,8 +988,16 @@ void InsetMathMacro::validate(LaTeXFeatures & features) const
MathData ar(const_cast<Buffer *>(&buffer()));
MacroData const * data = buffer().getMacro(name());
if (data) {
asArray(data->definition(), ar);
ar.validate(features);
// Avoid recursion on a recursive macro definition
docstring const & def = data->definition();
int pos = tokenPos(def, '\\', name());
char_type c = def.at(pos + name().size());
if (pos < 0 || (name().size() > 1 &&
((c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z')))) {
asArray(def, ar);
ar.validate(features);
}
}
}
}