commit 6e4cf808da4ea846d0f5195d0d684daf4912af43
Author: Thibaut Cuvelier <[email protected]>
Date:   Sun Jan 8 22:03:26 2023 +0100

    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
---
 src/insets/InsetIndex.cpp |    9 +++++++++
 1 files changed, 9 insertions(+), 0 deletions(-)

diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index a6fcae7..32cabca 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -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();
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to