InsetIndex: add a missing destructor for IndexNode and call it from xhtml() to avoid leaking resources.

Corresponding Coverity finding:

** CID 382778:  Resource leaks  (RESOURCE_LEAK)
/home/lasgoutt/src/lyx/coverity/lyx/src/insets/InsetIndex.cpp: 1909 in _ZNK3lyx15InsetPrintIndex5xhtmlB5cxx11ERNS_9XMLStreamERKNS_12OutputParamsE()

________________________________________________________________________________________________________
*** CID 382778:  Resource leaks  (RESOURCE_LEAK)
/home/lasgoutt/src/lyx/coverity/lyx/src/insets/InsetIndex.cpp: 1909 in _ZNK3lyx15InsetPrintIndex5xhtmlB5cxx11ERNS_9XMLStreamERKNS_12OutputParamsE()
1903            }
1904
1905            xs << xml::EndTag("ul");
1906            xs << xml::CR();
1907            xs << xml::EndTag("div");
1908
>>>     CID 382778:  Resource leaks  (RESOURCE_LEAK)
>>>     Variable "index_root" going out of scope leaks the storage it points to.
1909            return ods.str();
1910     }
1911
This commit is contained in:
Thibaut Cuvelier 2023-01-08 22:03:26 +01:00
parent a71126904f
commit 6e4cf808da

View File

@ -1658,6 +1658,14 @@ std::string generateCssClassAtDepth(unsigned depth) {
struct IndexNode {
std::vector<IndexEntry> entries;
std::vector<IndexNode*> children;
~IndexNode() {
for (IndexNode * child : children) {
if (!child)
continue;
delete child;
}
}
};
docstring termAtLevel(const IndexNode* node, unsigned depth)
@ -1901,6 +1909,7 @@ docstring InsetPrintIndex::xhtml(XMLStream &, OutputParams const & op) const
for (const IndexNode* node : index_root->children) {
outputIndexPage(xs, node);
}
delete index_root;
xs << xml::EndTag("ul");
xs << xml::CR();