mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-02 05:55:38 +00:00
Improve the fix for #9131. We were previously counting passes
through this routine, which means: one for every character, more or less. So long strings would hit the "recursion limit". But what we are worried about is an infinite loop caused by misues of macros, so that is what we need to count.
This commit is contained in:
parent
b128f3de14
commit
5579d3734a
@ -488,7 +488,7 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
|
||||
// we'll remove characters from the front of fmt as we
|
||||
// deal with them
|
||||
while (!fmt.empty()) {
|
||||
if (counter++ > max_passes) {
|
||||
if (counter > max_passes) {
|
||||
LYXERR0("Recursion limit reached while parsing `"
|
||||
<< format << "'.");
|
||||
return _("ERROR!");
|
||||
@ -506,6 +506,7 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
|
||||
string const val =
|
||||
buf.params().documentClass().getCiteMacro(engine_type, key);
|
||||
fmt = from_utf8(val) + fmt.substr(1);
|
||||
counter += 1;
|
||||
continue;
|
||||
} else if (key[0] == '_') {
|
||||
// a translatable bit
|
||||
@ -550,12 +551,15 @@ docstring BibTeXInfo::expandFormat(docstring const & format,
|
||||
getValueForKey(optkey, buf, before, after, dialog, xref);
|
||||
if (optkey == "next" && next)
|
||||
ret << ifpart; // without expansion
|
||||
else if (!val.empty())
|
||||
ret << expandFormat(ifpart, xref, counter, buf,
|
||||
else if (!val.empty()) {
|
||||
int newcounter = 0;
|
||||
ret << expandFormat(ifpart, xref, newcounter, buf,
|
||||
before, after, dialog, next);
|
||||
else if (!elsepart.empty())
|
||||
ret << expandFormat(elsepart, xref, counter, buf,
|
||||
} else if (!elsepart.empty()) {
|
||||
int newcounter = 0;
|
||||
ret << expandFormat(elsepart, xref, newcounter, buf,
|
||||
before, after, dialog, next);
|
||||
}
|
||||
// fmt will have been shortened for us already
|
||||
continue;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user