InsetIndex: make a condition more bullet-proof, a nullptr could be dereferenced.

Error noticed by Coverity:

*** CID 382777:  Memory - illegal accesses  (RETURN_LOCAL)
/home/lasgoutt/src/lyx/coverity/lyx/src/insets/InsetIndex.cpp: 1866 in _ZNK3lyx15InsetPrintIndex5xhtmlB5cxx11ERNS_9XMLStreamERKNS_12OutputParamsE()
1860
1861            // Collect the index entries in a form we can use them.
1862            vector<IndexEntry> entries;
1863            const docstring & indexType = params().getParamOr("type", from_ascii("idx"));
1864            for (const TocItem& item : *toc) {
1865                    const auto* inset = static_cast<const InsetIndex*>(&(item.dit().inset()));
>>>     CID 382777:  Memory - illegal accesses  (RETURN_LOCAL)
>>>     Using "indexType", which points to an out-of-scope temporary variable of type "lyx::docstring const".
1866                    if (item.isOutput() && inset->params().index == indexType)
1867                            entries.emplace_back(IndexEntry{inset, &op});
1868            }
1869
1870            // If all the index entries are in notes or not displayed, get out sooner.
1871            if (entries.empty())
This commit is contained in:
Thibaut Cuvelier 2023-01-08 22:19:39 +01:00
parent b42269f065
commit 2d56c01dcf

View File

@ -1858,7 +1858,7 @@ docstring InsetPrintIndex::xhtml(XMLStream &, OutputParams const & op) const
const docstring & indexType = params().getParamOr("type", from_ascii("idx")); const docstring & indexType = params().getParamOr("type", from_ascii("idx"));
for (const TocItem& item : *toc) { for (const TocItem& item : *toc) {
const auto* inset = static_cast<const InsetIndex*>(&(item.dit().inset())); const auto* inset = static_cast<const InsetIndex*>(&(item.dit().inset()));
if (item.isOutput() && inset->params().index == indexType) if (item.isOutput() && inset && inset->params().index == indexType)
entries.emplace_back(IndexEntry{inset, &op}); entries.emplace_back(IndexEntry{inset, &op});
} }