From b4d5ef176eced8315523baea464cfda733ecb9aa Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Mon, 3 Feb 2014 20:58:26 +0100 Subject: [PATCH] Bug 723314 - Doxygen crashes on incorrect end group /**< @} */ --- src/scanner.l | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/scanner.l b/src/scanner.l index c854d60dea3..9f163e29b8b 100644 --- a/src/scanner.l +++ b/src/scanner.l @@ -5023,6 +5023,7 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) tempEntry = current; // temporarily switch to the previous entry current = previous; + previous = 0; docBlockContext = SkipCurlyEndDoc; docBlockInBody = FALSE; @@ -5062,7 +5063,11 @@ OPERATOR "operator"{B}*({ARITHOP}|{ASSIGNOP}|{LOGICOP}|{BITOP}) } "}" { //addToBody("}"); - current = tempEntry; + if (tempEntry) // we can only switch back to current if no new item was created + { + current = tempEntry; + tempEntry = 0; + } BEGIN( lastCurlyContext ); } \" { @@ -6515,7 +6520,14 @@ static void startCommentBlock(bool brief) static void newEntry() { - current_root->addSubEntry(current); + if (tempEntry==0) // if temp entry is not 0, it holds current, + // and current is actually replaced by previous which was + // already added to current_root, so we should not add it again + // (see bug723314) + { + current_root->addSubEntry(current); + } + tempEntry = 0; previous = current; current = new Entry ; initEntry();