]> git.lyx.org Git - features.git/commitdiff
InsetIndex: add a missing destructor for IndexNode and call it from xhtml() to avoid...
authorThibaut Cuvelier <tcuvelier@lyx.org>
Sun, 8 Jan 2023 21:03:26 +0000 (22:03 +0100)
committerThibaut Cuvelier <tcuvelier@lyx.org>
Sun, 8 Jan 2023 21:03:36 +0000 (22:03 +0100)
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

src/insets/InsetIndex.cpp

index a6fcae77be00f41bfdd0ad403eb1074f79cfbc2b..32cabcaddf10e75c8091b154f01cb1e8feafc9c2 100644 (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();