diff --git a/doxgen-1.9.1-crash-when-parsing-config-file-part2.patch b/doxgen-1.9.1-crash-when-parsing-config-file-part2.patch new file mode 100644 index 0000000..38465ff --- /dev/null +++ b/doxgen-1.9.1-crash-when-parsing-config-file-part2.patch @@ -0,0 +1,22 @@ +diff -up doxygen/src/configimpl.l.orig doxygen/src/configimpl.l +--- doxygen/src/configimpl.l.orig 2021-01-19 17:25:00.933789247 +0100 ++++ doxygen/src/configimpl.l 2021-01-19 17:26:09.704744240 +0100 +@@ -1175,8 +1175,7 @@ static void substEnvVarsInStrList(String + for (const auto &s : sl) + { + QCString result = s.c_str(); +- // an argument with quotes will have an extra space at the end, so wasQuoted will be TRUE. +- bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1); ++ bool wasQuoted = (result.find(' ')!=-1) || (result.find('\t')!=-1) || (result.find('"')!=-1); + // here we strip the quote again + substEnvVarsInString(result); + +@@ -1229,7 +1228,7 @@ static void substEnvVarsInStrList(String + } + if (p!=l) // add the leftover as a string + { +- results.push_back(result.right(l-p).data()); ++ results.push_back(result.right(l-p).str()); + } + } + else // just goto the next element in the list diff --git a/doxgen-1.9.1-crash-when-parsing-config-file.patch b/doxgen-1.9.1-crash-when-parsing-config-file.patch new file mode 100644 index 0000000..848750d --- /dev/null +++ b/doxgen-1.9.1-crash-when-parsing-config-file.patch @@ -0,0 +1,64 @@ +commit 3b15963316b59cd1af3468a43535d90343916ffb +Author: Dimitri van Heesch +Date: Mon Jan 18 19:59:16 2021 +0100 + + issue #8343: doxygen-1.9.1 crashes when parsing config file + +diff --git a/src/configimpl.l b/src/configimpl.l +index 7f73ec01..56a2e108 100644 +--- a/src/configimpl.l ++++ b/src/configimpl.l +@@ -1210,7 +1210,7 @@ static void substEnvVarsInStrList(StringVector &sl) + c=result.at(i); + if (c=='"') // end quote + { +- results.push_back(result.mid(p,i-p).data()); ++ results.push_back(result.mid(p,i-p).str()); + p=i+1; + break; + } +@@ -1222,7 +1222,7 @@ static void substEnvVarsInStrList(StringVector &sl) + } + else if (c==' ' || c=='\t') // separator + { +- if (i>p) results.push_back(result.mid(p,i-p).data()); ++ if (i>p) results.push_back(result.mid(p,i-p).str()); + p=i+1; + } + } +@@ -1234,7 +1234,7 @@ static void substEnvVarsInStrList(StringVector &sl) + } + else // just goto the next element in the list + { +- if (!result.isEmpty()) results.push_back(result.data()); ++ if (!result.isEmpty()) results.push_back(result.str()); + } + } + sl = results; +@@ -1409,7 +1409,7 @@ static void cleanUpPaths(StringVector &str) + QFileInfo fi(path.c_str()); + if (fi.exists() && fi.isDir()) + { +- path = fi.absFilePath().utf8().data(); ++ path = fi.absFilePath().utf8().str(); + if (path[path.size()-1]!='/') path+='/'; + } + } +@@ -1545,7 +1545,7 @@ void Config::checkAndCorrect() + QString p = QDir::currentDirPath(); + if (p.at(p.length()-1)!='/') + p.append('/'); +- stripFromPath.push_back(p.utf8().data()); ++ stripFromPath.push_back(p.utf8().str()); + } + else + { +@@ -1882,7 +1882,7 @@ void Config::checkAndCorrect() + if (inputSources.empty()) + { + // use current dir as the default +- inputSources.push_back(QDir::currentDirPath().utf8().data()); ++ inputSources.push_back(QDir::currentDirPath().utf8().str()); + } + else + { diff --git a/doxygen-1.9.1-Coverity_issues.patch b/doxygen-1.9.1-Coverity_issues.patch new file mode 100644 index 0000000..a1848e6 --- /dev/null +++ b/doxygen-1.9.1-Coverity_issues.patch @@ -0,0 +1,49 @@ +diff -up doxygen-1.9.1/src/context.cpp.me doxygen-1.9.1/src/context.cpp +--- doxygen-1.9.1/src/context.cpp.me 2021-02-10 10:56:44.575251899 +0100 ++++ doxygen-1.9.1/src/context.cpp 2021-02-10 10:57:54.522809720 +0100 +@@ -4062,11 +4062,11 @@ class MemberContext::Private : public De + s_inst.addProperty("nameWithContextFor", &Private::nameWithContextFor); + init=TRUE; + } +- if (md && !md->cookie()) { md->setCookie(new MemberContext::Private::Cachable(md)); } ++ if (!md->cookie()) { md->setCookie(new MemberContext::Private::Cachable(md)); } + + Cachable &cache = getCache(); + cache.propertyAttrs.reset(TemplateList::alloc()); +- if (md && md->isProperty()) ++ if (md->isProperty()) + { + if (md->isGettable()) cache.propertyAttrs->append("get"); + if (md->isPrivateGettable()) cache.propertyAttrs->append("private get"); +@@ -4076,7 +4076,7 @@ class MemberContext::Private : public De + if (md->isProtectedSettable()) cache.propertyAttrs->append("protected set"); + } + cache.eventAttrs.reset(TemplateList::alloc()); +- if (md && md->isEvent()) ++ if (md->isEvent()) + { + if (md->isAddable()) cache.eventAttrs->append("add"); + if (md->isRemovable()) cache.eventAttrs->append("remove"); +diff -up doxygen-1.9.1/src/docparser.cpp.me doxygen-1.9.1/src/docparser.cpp +--- doxygen-1.9.1/src/docparser.cpp.me 2021-02-10 10:58:11.491500540 +0100 ++++ doxygen-1.9.1/src/docparser.cpp 2021-02-10 11:00:35.905512597 +0100 +@@ -1524,7 +1524,7 @@ reparsetoken: + { + QCString scope; + doctokenizerYYsetStateSetScope(); +- doctokenizerYYlex(); ++ (void)doctokenizerYYlex(); + scope = g_token->name; + g_context = scope; + //printf("Found scope='%s'\n",scope.data()); +diff -up doxygen-1.9.1/src/dotgroupcollaboration.cpp.me doxygen-1.9.1/src/dotgroupcollaboration.cpp +--- doxygen-1.9.1/src/dotgroupcollaboration.cpp.me 2021-02-10 11:01:10.588530954 +0100 ++++ doxygen-1.9.1/src/dotgroupcollaboration.cpp 2021-02-10 11:02:54.216221350 +0100 +@@ -309,6 +309,7 @@ void DotGroupCollaboration::Edge::write( + { + if (first) first=FALSE; else t << "\\n"; + t << DotNode::convertLabel(link->label); ++ count++; + } + if (count==maxLabels) t << "\\n..."; + t << "\""; diff --git a/doxygen-1.9.1-crash_in_docparser.patch b/doxygen-1.9.1-crash_in_docparser.patch new file mode 100644 index 0000000..adcd144 --- /dev/null +++ b/doxygen-1.9.1-crash_in_docparser.patch @@ -0,0 +1,12 @@ +diff -up doxygen-1.9.1/src/docparser.cpp.me doxygen-1.9.1/src/docparser.cpp +--- doxygen-1.9.1/src/docparser.cpp.me 2021-02-10 10:52:09.481086282 +0100 ++++ doxygen-1.9.1/src/docparser.cpp 2021-02-10 10:55:32.418781686 +0100 +@@ -951,7 +951,7 @@ static void handlePendingStyleCommands(D + children.append(new DocStyleChange(parent,g_nodeStack.count(),sc->style(),sc->tagName(),FALSE)); + g_initialStyleStack.push(sc); + g_styleStack.pop(); +- sc = g_styleStack.top(); ++ sc = !g_styleStack.isEmpty() ? g_styleStack.top() : 0; + } + } + } diff --git a/doxygen.spec b/doxygen.spec index 90d8f4b..9dd445c 100644 --- a/doxygen.spec +++ b/doxygen.spec @@ -8,20 +8,23 @@ Summary: A documentation system for C/C++ Name: doxygen -Epoch: 1 -Version: 1.9.2 -Release: 4%{?dist} +Epoch: 2 +Version: 1.9.1 +Release: 12%{?dist} # No version is specified. License: GPL+ Url: http://www.doxygen.nl -Source0: https://doxygen.nl/files/%{name}-%{version}-d882240f-git.src.tar.gz -#Source0: https://doxygen.nl/files/%{name}-%{version}.src.tar.gz +Source0: https://doxygen.nl/files/%{name}-%{version}.src.tar.gz # this icon is part of kdesdk Source1: doxywizard.desktop # these icons are part of doxygen and converted from doxywizard.ico Source2: doxywizard-icons.tar.xz # upstream patches +Patch1: doxgen-1.9.1-crash-when-parsing-config-file.patch +Patch2: doxgen-1.9.1-crash-when-parsing-config-file-part2.patch +Patch3: doxygen-1.9.1-Coverity_issues.patch +Patch4: doxygen-1.9.1-crash_in_docparser.patch BuildRequires: %{_bindir}/python3 BuildRequires: gcc-c++ gcc @@ -295,6 +298,9 @@ desktop-file-install --dir=%{buildroot}%{_datadir}/applications %{SOURCE1} %endif %changelog +* Wed Oct 27 2021 Than Ngo - 2:1.9.1-12 +- revert 1.9.1, noarch package built differently on different architectures + * Wed Oct 27 2021 Than Ngo - 1:1.9.2-4 - update diff --git a/sources b/sources index cce33e9..33c38ae 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ SHA512 (doxywizard-icons.tar.xz) = 865a86d7535e64ad92e36ba1f901d51cd6b603e762e5c68761a45bc1f965a36e6a6c8d29468ecb2ec799f0add2347537723832aff6660c76af453f80a0a370ad -SHA512 (doxygen-1.9.2-d882240f-git.src.tar.gz) = 3e32f11b0dd0078f1edad2182a348514b3e68bb66eb256c1b89f297777afd60c7fd40c46d03d3de69acd3b87e04b6a9bfa2edc09d516f1f9bfb31b63093d134e +SHA512 (doxygen-1.9.1.src.tar.gz) = 637496c549a4a150cfaeb5d4913de512262145ecd7d455d7b7f3dd68f9416e47d931a6c1efd8a17d931e4baf4a8a9f2ed21124664003b123b6f89ca4abf263ed