diff options
author | Dimitri van Heesch <dimitri@stack.nl> | 2014-08-26 18:18:51 (GMT) |
---|---|---|
committer | Dimitri van Heesch <dimitri@stack.nl> | 2014-08-26 18:18:51 (GMT) |
commit | 6d4044ad43ae1424a256eb1c26992301e7c64f4a (patch) | |
tree | 59ff43371e5c9503fda7432109c1313ffff0225a | |
parent | 745955f576cbd7b5f7601c55937d9c42db8161e8 (diff) | |
download | Doxygen-6d4044ad43ae1424a256eb1c26992301e7c64f4a.zip Doxygen-6d4044ad43ae1424a256eb1c26992301e7c64f4a.tar.gz Doxygen-6d4044ad43ae1424a256eb1c26992301e7c64f4a.tar.bz2 |
Fix potential crash when reading tag file which contained nested java classes using generics
Also fixed a parse error when reading a tag file with a Java-style enum
-rw-r--r-- | src/doxygen.cpp | 13 | ||||
-rw-r--r-- | src/tagreader.cpp | 9 |
2 files changed, 18 insertions, 4 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 533e6ef..5492dc9 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -1037,9 +1037,16 @@ static Definition *buildScopeFromQualifiedName(const QCString name, else // scope is a namespace { } - // make the parent/child scope relation - prevScope->addInnerCompound(innerScope); - innerScope->setOuterScope(prevScope); + if (innerScope) + { + // make the parent/child scope relation + prevScope->addInnerCompound(innerScope); + innerScope->setOuterScope(prevScope); + } + else // current scope is a class, so return only the namespace part... + { + return prevScope; + } // proceed to the next scope fragment p=idx+l+2; prevScope=innerScope; diff --git a/src/tagreader.cpp b/src/tagreader.cpp index 23b8f13..50909ee 100644 --- a/src/tagreader.cpp +++ b/src/tagreader.cpp @@ -95,7 +95,7 @@ class TagMemberInfo class TagClassInfo { public: - enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category }; + enum Kind { Class, Struct, Union, Interface, Exception, Protocol, Category, Enum }; TagClassInfo() { bases=0, templateArguments=0; members.setAutoDelete(TRUE); isObjC=FALSE; } ~TagClassInfo() { delete bases; delete templateArguments; } QCString name; @@ -301,6 +301,12 @@ class TagFileParser : public QXmlDefaultHandler m_curClass->kind = TagClassInfo::Interface; m_state = InClass; } + else if (kind=="enum") + { + m_curClass = new TagClassInfo; + m_curClass->kind = TagClassInfo::Enum; + m_state = InClass; + } else if (kind=="exception") { m_curClass = new TagClassInfo; @@ -1286,6 +1292,7 @@ void TagFileParser::buildLists(Entry *root) case TagClassInfo::Struct: ce->spec = Entry::Struct; break; case TagClassInfo::Union: ce->spec = Entry::Union; break; case TagClassInfo::Interface: ce->spec = Entry::Interface; break; + case TagClassInfo::Enum: ce->spec = Entry::Enum; break; case TagClassInfo::Exception: ce->spec = Entry::Exception; break; case TagClassInfo::Protocol: ce->spec = Entry::Protocol; break; case TagClassInfo::Category: ce->spec = Entry::Category; break; |