Using doxygen-1.8.14-i586-2.txz in Slackware64-current doxygen will segfault when ran in the cppunit doc directory.
Code:
Generatinmake[2]: *** [Makefile:541: html/index.html] Segmentation fault
The Makefile has the following.
Code:
html/index.html: Doxyfile $(doxygen_input)
"/usr/bin/doxygen"
I next found it can be reproduced easily.
Code:
wget https://dev-www.libreoffice.org/src/cppunit-1.14.0.tar.gz
tar xvf ./cppunit-1.14.0.tar.gz
cd ./cppunit-1.14.0
./configure
cd doc
doxygen
# should crash here
The backtrace.
Code:
Program received signal SIGSEGV, Segmentation fault.
0x000000000085ce21 in QGListIterator::QGListIterator (this=0x7fffffffd9a0, l=...)
at /tmp/doxygen-1.8.14/qtools/qglist.cpp:1058
1058 curNode = list->firstNode; // set to first node
(gdb) bt
#0 0x000000000085ce21 in QGListIterator::QGListIterator (this=0x7fffffffd9a0, l=...)
at /tmp/doxygen-1.8.14/qtools/qglist.cpp:1058
#1 0x0000000000457001 in QListIterator<Argument>::QListIterator (this=0x7fffffffd9a0,
l=...) at /tmp/doxygen-1.8.14/qtools/qlist.h:129
#2 0x000000000057d5f0 in insertMemberFunctionParams (id_memberdef=529, md=0x19fb710, def=
0x148c800) at /tmp/doxygen-1.8.14/src/sqlite3gen.cpp:595
#3 0x000000000057fd4b in generateSqlite3ForMember (md=0x19fb710, def=0x148c800)
at /tmp/doxygen-1.8.14/src/sqlite3gen.cpp:1098
#4 0x0000000000580218 in generateSqlite3Section (d=0x148c800, ml=0x18248d0)
at /tmp/doxygen-1.8.14/src/sqlite3gen.cpp:1158
#5 0x0000000000580d95 in generateSqlite3ForClass (cd=0x148c800)
at /tmp/doxygen-1.8.14/src/sqlite3gen.cpp:1300
#6 0x0000000000581b04 in generateSqlite3 () at /tmp/doxygen-1.8.14/src/sqlite3gen.cpp:1518
#7 0x000000000044ee48 in generateOutput () at /tmp/doxygen-1.8.14/src/doxygen.cpp:11607
#8 0x0000000000419cb3 in main (argc=1, argv=0x7fffffffe3a8)
at /tmp/doxygen-1.8.14/src/main.cpp:38
Full log -
https://pastebin.com/yNJhV6Jd
I then next found its broken in doxygen 1.18.14 and their current git master, but it works in the older 1.18.13.
Next git bisect revealed this as the first bad commit.
Code:
9468ede259153cf79eb8d61635389744e9a2ee7d is the first bad commit
commit 9468ede259153cf79eb8d61635389744e9a2ee7d
Author: Dimitri van Heesch <dimitri@stack.nl>
Date: Sun Oct 29 11:47:48 2017 +0100
Bug 789168 - Increasing access of inherited C++ members with 'using...' is not recognized by Doxygen
:040000 040000 6101213cf663d18601f6a54422de0b5be79a4b8f 7aa22442fc644425ab357edc86770bf4dfc836e1 M src
https://github.com/doxygen/doxygen/c...389744e9a2ee7d
I next tried to revert it with the 1.18.14 release and found the crash no longer occurred, but I have not tested it much beyond that.
Code:
patch -R -p1 < $CWD/test.patch
Code:
From 9468ede259153cf79eb8d61635389744e9a2ee7d Mon Sep 17 00:00:00 2001
From: Dimitri van Heesch <dimitri@stack.nl>
Date: Sun, 29 Oct 2017 11:47:48 +0100
Subject: [PATCH] Bug 789168 - Increasing access of inherited C++ members with
'using...' is not recognized by Doxygen
---
src/doxygen.cpp | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)
diff --git a/src/doxygen.cpp b/src/doxygen.cpp
index d3554cffd..ec97d4354 100644
--- a/src/doxygen.cpp
+++ b/src/doxygen.cpp
@@ -2112,9 +2112,8 @@ static void findUsingDeclImports(EntryNav *rootNav)
(rootNav->parent()->section()&Entry::COMPOUND_MASK) // in a class/struct member
)
{
- //printf("Found using declaration %s at line %d of %s inside section %x\n",
- // root->name.data(),root->startLine,root->fileName.data(),
- // root->parent->section);
+ //printf("Found using declaration %s inside section %x\n",
+ // rootNav->name().data(), rootNav->parent()->section());
QCString fullName=removeRedundantWhiteSpace(rootNav->parent()->name());
fullName=stripAnonymousNamespaceScope(fullName);
fullName=stripTemplateSpecifiersFromScope(fullName);
@@ -2130,7 +2129,7 @@ static void findUsingDeclImports(EntryNav *rootNav)
ClassDef *bcd = getResolvedClass(cd,0,scope); // todo: file in fileScope parameter
if (bcd)
{
- //printf("found class %s\n",bcd->name().data());
+ //printf("found class %s memName=%s\n",bcd->name().data(),memName.data());
MemberNameInfoSDict *mndict=bcd->memberNameInfoSDict();
if (mndict)
{
@@ -11181,7 +11180,6 @@ void parseInput()
g_s.end();
g_s.begin("Searching for members imported via using declarations...\n");
- findUsingDeclImports(rootNav);
// this should be after buildTypedefList in order to properly import
// used typedefs
findUsingDeclarations(rootNav);
@@ -11249,6 +11247,7 @@ void parseInput()
g_s.begin("Searching for member function documentation...\n");
findObjCMethodDefinitions(rootNav);
findMemberDocumentation(rootNav); // may introduce new members !
+ findUsingDeclImports(rootNav); // may introduce new members !
transferRelatedFunctionDocumentation();
transferFunctionDocumentation();