From 2a21c12eab4035b64d68a911a0e1f5008dfee1b3 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Mon, 29 Mar 2010 20:52:07 +0000 Subject: [PATCH] There are other ways we can get in trouble, so let's impose the limit slightly differently. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@33927 a592a061-630c-0410-9148-cb99ea01b6c8 --- src/BiblioInfo.cpp | 14 +++++++------- src/BiblioInfo.h | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/BiblioInfo.cpp b/src/BiblioInfo.cpp index acff8dc971..b88546e7f1 100644 --- a/src/BiblioInfo.cpp +++ b/src/BiblioInfo.cpp @@ -396,22 +396,21 @@ namespace { docstring BibTeXInfo::expandFormat(string const & format, - BibTeXInfo const * const xref, Buffer const & buf, + BibTeXInfo const * const xref, int & counter, Buffer const & buf, bool richtext) const { // incorrect use of macros could put us in an infinite loop - static int max_passes = 1000; + static int max_passes = 5000; docstring ret; // return value string key; bool scanning_key = false; bool scanning_rich = false; - int passes = 0; string fmt = format; // we'll remove characters from the front of fmt as we // deal with them while (fmt.size()) { - if (passes++ > max_passes) { + if (counter++ > max_passes) { LYXERR0("Recursion limit reached while parsing `" << format << "'."); return _("ERROR!"); @@ -466,9 +465,9 @@ docstring BibTeXInfo::expandFormat(string const & format, fmt = newfmt; docstring const val = getValueForKey(optkey, xref); if (!val.empty()) - ret += expandFormat(ifpart, xref, buf, richtext); + ret += expandFormat(ifpart, xref, counter, buf, richtext); else if (!elsepart.empty()) - ret += expandFormat(elsepart, xref, buf, richtext); + ret += expandFormat(elsepart, xref, counter, buf, richtext); // fmt will have been shortened for us already continue; } @@ -524,7 +523,8 @@ docstring const & BibTeXInfo::getInfo(BibTeXInfo const * const xref, DocumentClass const & dc = buf.params().documentClass(); string const & format = dc.getCiteFormat(to_utf8(entry_type_)); - info_ = expandFormat(format, xref, buf, richtext); + int counter = 0; + info_ = expandFormat(format, xref, counter, buf, richtext); if (!info_.empty()) info_ = convertLaTeXCommands(info_); diff --git a/src/BiblioInfo.h b/src/BiblioInfo.h index 33a7625bd3..3e7266fac8 100644 --- a/src/BiblioInfo.h +++ b/src/BiblioInfo.h @@ -122,7 +122,7 @@ private: /// moreover, keys that look like "%_key%" are treated as translatable /// so that things like "pp." and "vol." can be translated. docstring expandFormat(std::string const & fmt, - BibTeXInfo const * const xref, + BibTeXInfo const * const xref, int & counter, Buffer const & buf, bool richtext) const; /// true if from BibTeX; false if from bibliography environment bool is_bibtex_; -- 2.39.2