[Libreoffice-commits] core.git: bridges/source compilerplugins/clang slideshow/source writerfilter/source xmlsecurity/source

Noel Grandin (via logerrit) logerrit at kemper.freedesktop.org
Wed Aug 21 09:17:18 UTC 2019


 bridges/source/cpp_uno/shared/vtablefactory.cxx               |    2 
 compilerplugins/clang/constvars.cxx                           |   70 ++++++++--
 compilerplugins/clang/test/constvars.cxx                      |   60 ++++++++
 slideshow/source/engine/slide/userpaintoverlay.cxx            |    2 
 writerfilter/source/dmapper/DomainMapperTableHandler.cxx      |    4 
 writerfilter/source/dmapper/DomainMapper_Impl.cxx             |    2 
 writerfilter/source/dmapper/PropertyMap.cxx                   |    6 
 writerfilter/source/dmapper/SdtHelper.cxx                     |    2 
 writerfilter/source/dmapper/StyleSheetTable.cxx               |    4 
 writerfilter/source/rtftok/rtfdispatchdestination.cxx         |    2 
 writerfilter/source/rtftok/rtfdispatchflag.cxx                |    2 
 writerfilter/source/rtftok/rtfdocumentimpl.cxx                |   16 +-
 writerfilter/source/rtftok/rtfsdrimport.cxx                   |    2 
 writerfilter/source/rtftok/rtfsprm.cxx                        |    2 
 xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx |    2 
 15 files changed, 141 insertions(+), 37 deletions(-)

New commits:
commit 10280dabe2c1c47c3cddbc28fcd701deb618772f
Author:     Noel Grandin <noel.grandin at collabora.co.uk>
AuthorDate: Tue Aug 13 15:14:06 2019 +0200
Commit:     Noel Grandin <noel.grandin at collabora.co.uk>
CommitDate: Wed Aug 21 11:16:15 2019 +0200

    loplugin:constvars, look for loop vars that can be const
    
    Change-Id: I67ee714739800f3718f9d3facf57474cd564d855
    Reviewed-on: https://gerrit.libreoffice.org/77415
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.grandin at collabora.co.uk>

diff --git a/bridges/source/cpp_uno/shared/vtablefactory.cxx b/bridges/source/cpp_uno/shared/vtablefactory.cxx
index 9eb4d690204f..c71ae52ae14e 100644
--- a/bridges/source/cpp_uno/shared/vtablefactory.cxx
+++ b/bridges/source/cpp_uno/shared/vtablefactory.cxx
@@ -182,7 +182,7 @@ VtableFactory::VtableFactory(): m_arena(
 VtableFactory::~VtableFactory() {
     {
         osl::MutexGuard guard(m_mutex);
-        for (auto& rEntry : m_map) {
+        for (const auto& rEntry : m_map) {
             for (sal_Int32 j = 0; j < rEntry.second.count; ++j) {
                 freeBlock(rEntry.second.blocks[j]);
             }
diff --git a/compilerplugins/clang/constvars.cxx b/compilerplugins/clang/constvars.cxx
index 56f863407f0b..d4a431dc14f0 100644
--- a/compilerplugins/clang/constvars.cxx
+++ b/compilerplugins/clang/constvars.cxx
@@ -127,6 +127,7 @@ public:
     bool shouldVisitImplicitCode() const { return true; }
 
     bool VisitVarDecl(const VarDecl*);
+    bool VisitCXXForRangeStmt(const CXXForRangeStmt*);
     bool VisitDeclRefExpr(const DeclRefExpr*);
     bool TraverseCXXConstructorDecl(CXXConstructorDecl*);
     bool TraverseCXXMethodDecl(CXXMethodDecl*);
@@ -167,7 +168,7 @@ void ConstVars::run()
         // Implement a marker that disables this plugins warning at a specific site
         if (sourceString.contains("loplugin:constvars:ignore"))
             continue;
-        report(DiagnosticsEngine::Warning, "static var can be const", compat::getBeginLoc(v));
+        report(DiagnosticsEngine::Warning, "var can be const", compat::getBeginLoc(v));
     }
 }
 
@@ -178,6 +179,8 @@ bool ConstVars::VisitVarDecl(const VarDecl* varDecl)
         return true;
     if (!varDecl->hasGlobalStorage())
         return true;
+    if (isa<ParmVarDecl>(varDecl))
+        return true;
     if (varDecl->getLinkageAndVisibility().getLinkage() == ExternalLinkage)
         return true;
     if (varDecl->getType().isConstQualified())
@@ -192,6 +195,8 @@ bool ConstVars::VisitVarDecl(const VarDecl* varDecl)
 
     if (!varDecl->getInit())
         return true;
+    if (varDecl->getInit()->isInstantiationDependent())
+        return true;
     if (!varDecl->getInit()->isCXX11ConstantExpr(compiler.getASTContext()))
         return true;
 
@@ -199,6 +204,26 @@ bool ConstVars::VisitVarDecl(const VarDecl* varDecl)
     return true;
 }
 
+bool ConstVars::VisitCXXForRangeStmt(const CXXForRangeStmt* forStmt)
+{
+    if (compat::getBeginLoc(forStmt).isValid() && ignoreLocation(forStmt))
+        return true;
+    const VarDecl* varDecl = forStmt->getLoopVariable();
+    if (!varDecl)
+        return true;
+    // we don't handle structured assignment properly
+    if (isa<DecompositionDecl>(varDecl))
+        return true;
+    auto tc = loplugin::TypeCheck(varDecl->getType());
+    if (!tc.LvalueReference())
+        return true;
+    if (tc.LvalueReference().Const())
+        return true;
+
+    definitionSet.insert(varDecl);
+    return true;
+}
+
 bool ConstVars::TraverseCXXConstructorDecl(CXXConstructorDecl* cxxConstructorDecl)
 {
     auto copy = insideMoveOrCopyDeclParent;
@@ -276,7 +301,9 @@ void ConstVars::check(const VarDecl* varDecl, const Expr* memberExpr)
     const Stmt* child = memberExpr;
     const Stmt* parent
         = parentsRange.begin() == parentsRange.end() ? nullptr : parentsRange.begin()->get<Stmt>();
+
     // walk up the tree until we find something interesting
+
     bool bCannotBeConst = false;
     bool bDump = false;
     auto walkUp = [&]() {
@@ -295,16 +322,25 @@ void ConstVars::check(const VarDecl* varDecl, const Expr* memberExpr)
             if (parentsRange.begin() != parentsRange.end())
             {
                 auto varDecl = dyn_cast_or_null<VarDecl>(parentsRange.begin()->get<Decl>());
-                // The isImplicit() call is to avoid triggering when we see the vardecl which is part of a for-range statement,
-                // which is of type 'T&&' and also an l-value-ref ?
-                if (varDecl && !varDecl->isImplicit()
-                    && loplugin::TypeCheck(varDecl->getType()).LvalueReference().NonConst())
+                if (varDecl)
                 {
-                    bCannotBeConst = true;
+                    if (varDecl->isImplicit())
+                    {
+                        // so we can walk up from inside a for-range stmt
+                        parentsRange = compiler.getASTContext().getParents(*varDecl);
+                        if (parentsRange.begin() != parentsRange.end())
+                            parent = parentsRange.begin()->get<Stmt>();
+                    }
+                    else if (loplugin::TypeCheck(varDecl->getType()).LvalueReference().NonConst())
+                    {
+                        bCannotBeConst = true;
+                        break;
+                    }
                 }
             }
-            break;
         }
+        if (!parent)
+            break;
         if (isa<CXXReinterpretCastExpr>(parent))
         {
             // once we see one of these, there is not much useful we can know
@@ -422,9 +458,18 @@ void ConstVars::check(const VarDecl* varDecl, const Expr* memberExpr)
             }
             break;
         }
+        else if (auto rangeStmt = dyn_cast<CXXForRangeStmt>(parent))
+        {
+            if (rangeStmt->getRangeStmt() == child)
+            {
+                auto tc = loplugin::TypeCheck(rangeStmt->getLoopVariable()->getType());
+                if (tc.LvalueReference().NonConst())
+                    bCannotBeConst = true;
+            }
+            break;
+        }
         else if (isa<SwitchStmt>(parent) || isa<WhileStmt>(parent) || isa<ForStmt>(parent)
-                 || isa<IfStmt>(parent) || isa<DoStmt>(parent) || isa<CXXForRangeStmt>(parent)
-                 || isa<DefaultStmt>(parent))
+                 || isa<IfStmt>(parent) || isa<DoStmt>(parent) || isa<DefaultStmt>(parent))
         {
             break;
         }
@@ -470,10 +515,11 @@ bool ConstVars::IsPassedByNonConst(const VarDecl* varDecl, const Stmt* child,
     {
         for (unsigned i = 0; i < len; ++i)
             if (callExpr.getArg(i) == child)
-                if (loplugin::TypeCheck(calleeFunctionDecl.getParamType(i))
-                        .LvalueReference()
-                        .NonConst())
+            {
+                auto tc = loplugin::TypeCheck(calleeFunctionDecl.getParamType(i));
+                if (tc.LvalueReference().NonConst() || tc.Pointer().NonConst())
                     return true;
+            }
     }
     return false;
 }
diff --git a/compilerplugins/clang/test/constvars.cxx b/compilerplugins/clang/test/constvars.cxx
index 40f3250a6512..dc3c1ecb9c6b 100644
--- a/compilerplugins/clang/test/constvars.cxx
+++ b/compilerplugins/clang/test/constvars.cxx
@@ -12,11 +12,17 @@
 #else
 
 #include <com/sun/star/uno/Any.hxx>
+#include <com/sun/star/uno/Sequence.hxx>
+#include <com/sun/star/uno/XInterface.hpp>
+#include <map>
+#include <list>
+#include <vector>
+#include <rtl/ustring.hxx>
 
 namespace test1
 {
 int const aFormalArgs[] = { 1, 2 };
-// expected-error at +1 {{static var can be const [loplugin:constvars]}}
+// expected-error at +1 {{var can be const [loplugin:constvars]}}
 static sal_uInt16 nMediaArgsCount = SAL_N_ELEMENTS(aFormalArgs);
 sal_uInt16 foo()
 {
@@ -44,6 +50,58 @@ static sal_uInt16 nMediaArgsCount = 1; // loplugin:constvars:ignore
 sal_uInt16 foo() { return nMediaArgsCount; }
 };
 
+// no warning expected, we don't handle these destructuring assignments properly yet
+namespace test4
+{
+void foo()
+{
+    std::map<OUString, OUString> aMap;
+    for (auto & [ rName, rEntry ] : aMap)
+    {
+        rEntry.clear();
+    }
+}
+};
+
+// no warning expected
+namespace test5
+{
+struct Struct1
+{
+};
+void release(Struct1*);
+void foo(std::list<Struct1*> aList)
+{
+    for (Struct1* pItem : aList)
+    {
+        release(pItem);
+    }
+}
+};
+
+namespace test6
+{
+void foo(css::uno::Sequence<css::uno::Reference<css::uno::XInterface>>& aSeq)
+{
+    // expected-error at +1 {{var can be const [loplugin:constvars]}}
+    for (css::uno::Reference<css::uno::XInterface>& x : aSeq)
+    {
+        x.get();
+    }
+}
+};
+
+// no warning expected
+namespace test7
+{
+void foo(std::vector<std::vector<int>> aVecVec)
+{
+    for (auto& rVec : aVecVec)
+        for (auto& rElement : rVec)
+            rElement = 1;
+}
+};
+
 #endif
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/slideshow/source/engine/slide/userpaintoverlay.cxx b/slideshow/source/engine/slide/userpaintoverlay.cxx
index 1e167016dfb4..2382a50875c2 100644
--- a/slideshow/source/engine/slide/userpaintoverlay.cxx
+++ b/slideshow/source/engine/slide/userpaintoverlay.cxx
@@ -213,7 +213,7 @@ namespace slideshow
             //Draw all registered polygons.
             void drawPolygons()
             {
-                for( auto& rxPolygon : maPolygons )
+                for( const auto& rxPolygon : maPolygons )
                 {
                     rxPolygon->draw();
                 }
diff --git a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
index f1ca99fc77bf..90cb75dbbd5a 100644
--- a/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
+++ b/writerfilter/source/dmapper/DomainMapperTableHandler.cxx
@@ -253,7 +253,7 @@ bool lcl_extractTableBorderProperty(const PropertyMapPtr& pTableProperties, cons
 void lcl_extractHoriOrient(std::vector<beans::PropertyValue>& rFrameProperties, sal_Int32& nHoriOrient)
 {
     // Shifts the frame left by the given value.
-    for (beans::PropertyValue & rFrameProperty : rFrameProperties)
+    for (const beans::PropertyValue & rFrameProperty : rFrameProperties)
     {
         if (rFrameProperty.Name == "HoriOrient")
         {
@@ -870,7 +870,7 @@ CellPropertyValuesSeq_t DomainMapperTableHandler::endTableGetCellProperties(Tabl
 /// Do all cells in this row have a CellHideMark property?
 static bool lcl_hideMarks(PropertyMapVector1& rCellProperties)
 {
-    for (PropertyMapPtr & p : rCellProperties)
+    for (const PropertyMapPtr & p : rCellProperties)
     {
         // if anything is vertically merged, the row must not be set to fixed
         // as Writer's layout doesn't handle that well
diff --git a/writerfilter/source/dmapper/DomainMapper_Impl.cxx b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
index f69073781964..c53acd9cb1ee 100644
--- a/writerfilter/source/dmapper/DomainMapper_Impl.cxx
+++ b/writerfilter/source/dmapper/DomainMapper_Impl.cxx
@@ -692,7 +692,7 @@ void DomainMapper_Impl::IncorporateTabStop( const DeletableTabStop &  rTabStop )
 uno::Sequence< style::TabStop > DomainMapper_Impl::GetCurrentTabStopAndClear()
 {
     std::vector<style::TabStop> aRet;
-    for (DeletableTabStop& rStop : m_aCurrentTabStops)
+    for (const DeletableTabStop& rStop : m_aCurrentTabStops)
     {
         if (!rStop.bDeleted)
             aRet.push_back(rStop);
diff --git a/writerfilter/source/dmapper/PropertyMap.cxx b/writerfilter/source/dmapper/PropertyMap.cxx
index 395ab2e1be99..c59b13e7378c 100644
--- a/writerfilter/source/dmapper/PropertyMap.cxx
+++ b/writerfilter/source/dmapper/PropertyMap.cxx
@@ -1226,7 +1226,7 @@ void SectionPropertyMap::HandleIncreasedAnchoredObjectSpacing(DomainMapper_Impl&
     sal_Int32 nTextAreaWidth = nPageWidth - GetLeftMargin() - GetRightMargin();
 
     std::vector<AnchoredObjectInfo>& rAnchoredObjectAnchors = rDM_Impl.m_aAnchoredObjectAnchors;
-    for (auto& rAnchor : rAnchoredObjectAnchors)
+    for (const auto& rAnchor : rAnchoredObjectAnchors)
     {
         // Ignore this paragraph when there are not enough shapes to trigger the Word bug we
         // emulate.
@@ -1732,12 +1732,12 @@ void SectionPropertyMap::ApplyProperties_( const uno::Reference< beans::XPropert
                 vValues.push_back( pIter->Value );
             }
         }
-        for ( beans::PropertyValue & v : vCharVals )
+        for ( const beans::PropertyValue & v : std::as_const(vCharVals) )
         {
             vNames.push_back( v.Name );
             vValues.push_back( v.Value );
         }
-        for ( beans::PropertyValue & v : vParaVals )
+        for ( const beans::PropertyValue & v : std::as_const(vParaVals) )
         {
             vNames.push_back( v.Name );
             vValues.push_back( v.Value );
diff --git a/writerfilter/source/dmapper/SdtHelper.cxx b/writerfilter/source/dmapper/SdtHelper.cxx
index 05de4b0b6788..322834de7ac9 100644
--- a/writerfilter/source/dmapper/SdtHelper.cxx
+++ b/writerfilter/source/dmapper/SdtHelper.cxx
@@ -200,7 +200,7 @@ sal_Int32 SdtHelper::getInteropGrabBagSize() { return m_aGrabBag.size(); }
 
 bool SdtHelper::containedInInteropGrabBag(const OUString& rValueName)
 {
-    for (beans::PropertyValue& i : m_aGrabBag)
+    for (const beans::PropertyValue& i : m_aGrabBag)
         if (i.Name == rValueName)
             return true;
 
diff --git a/writerfilter/source/dmapper/StyleSheetTable.cxx b/writerfilter/source/dmapper/StyleSheetTable.cxx
index 8864336611ce..7e10e334bcf7 100644
--- a/writerfilter/source/dmapper/StyleSheetTable.cxx
+++ b/writerfilter/source/dmapper/StyleSheetTable.cxx
@@ -1228,7 +1228,7 @@ void StyleSheetTable::ApplyStyleSheets( const FontTablePtr& rFontTable )
 const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(const OUString& sIndex)
 {
     StyleSheetEntryPtr pRet;
-    for(StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
+    for(const StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
     {
         if( rpEntry->sStyleIdentifierD == sIndex)
         {
@@ -1243,7 +1243,7 @@ const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByISTD(const OUString& s
 const StyleSheetEntryPtr StyleSheetTable::FindStyleSheetByConvertedStyleName(const OUString& sIndex)
 {
     StyleSheetEntryPtr pRet;
-    for(StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
+    for(const StyleSheetEntryPtr & rpEntry : m_pImpl->m_aStyleSheetEntries)
     {
         if( rpEntry->sConvertedStyleName == sIndex)
         {
diff --git a/writerfilter/source/rtftok/rtfdispatchdestination.cxx b/writerfilter/source/rtftok/rtfdispatchdestination.cxx
index 0a6a5fe1d955..6cdaab12eff8 100644
--- a/writerfilter/source/rtftok/rtfdispatchdestination.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchdestination.cxx
@@ -362,7 +362,7 @@ RTFError RTFDocumentImpl::dispatchDestination(RTFKeyword nKeyword)
             case RTF_DPTXBXTEXT:
             {
                 bool bPictureFrame = false;
-                for (auto& rProperty : m_aStates.top().getShape().getProperties())
+                for (const auto& rProperty : m_aStates.top().getShape().getProperties())
                 {
                     if (rProperty.first == "shapeType"
                         && rProperty.second == OUString::number(ESCHER_ShpInst_PictureFrame))
diff --git a/writerfilter/source/rtftok/rtfdispatchflag.cxx b/writerfilter/source/rtftok/rtfdispatchflag.cxx
index 45e5152e3f93..b8f2ad826862 100644
--- a/writerfilter/source/rtftok/rtfdispatchflag.cxx
+++ b/writerfilter/source/rtftok/rtfdispatchflag.cxx
@@ -1028,7 +1028,7 @@ RTFError RTFDocumentImpl::dispatchFlag(RTFKeyword nKeyword)
             }
             std::vector<beans::PropertyValue>& rPendingProperties
                 = m_aStates.top().getDrawingObject().getPendingProperties();
-            for (auto& rPendingProperty : rPendingProperties)
+            for (const auto& rPendingProperty : rPendingProperties)
                 m_aStates.top().getDrawingObject().getPropertySet()->setPropertyValue(
                     rPendingProperty.Name, rPendingProperty.Value);
             m_pSdrImport->resolveDhgt(m_aStates.top().getDrawingObject().getPropertySet(),
diff --git a/writerfilter/source/rtftok/rtfdocumentimpl.cxx b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
index 14fb9f711527..c396f7fb1787 100644
--- a/writerfilter/source/rtftok/rtfdocumentimpl.cxx
+++ b/writerfilter/source/rtftok/rtfdocumentimpl.cxx
@@ -448,11 +448,11 @@ static void lcl_copyFlatten(RTFReferenceProperties& rProps, RTFSprms& rStyleAttr
         {
             // rPr can have both attributes and SPRMs, copy over both types.
             RTFSprms& rRPrSprms = rSprm.second->getSprms();
-            for (auto& rRPrSprm : rRPrSprms)
+            for (const auto& rRPrSprm : rRPrSprms)
                 rStyleSprms.set(rRPrSprm.first, rRPrSprm.second);
 
             RTFSprms& rRPrAttributes = rSprm.second->getAttributes();
-            for (auto& rRPrAttribute : rRPrAttributes)
+            for (const auto& rRPrAttribute : rRPrAttributes)
                 rStyleAttributes.set(rRPrAttribute.first, rRPrAttribute.second);
         }
         else
@@ -460,7 +460,7 @@ static void lcl_copyFlatten(RTFReferenceProperties& rProps, RTFSprms& rStyleAttr
     }
 
     RTFSprms& rAttributes = rProps.getAttributes();
-    for (auto& rAttribute : rAttributes)
+    for (const auto& rAttribute : rAttributes)
         rStyleAttributes.set(rAttribute.first, rAttribute.second);
 }
 
@@ -1047,7 +1047,7 @@ void RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XS
     auto pExtentValue = new RTFValue(aExtentAttributes);
     // docpr sprm
     RTFSprms aDocprAttributes;
-    for (auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
+    for (const auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
         if (rCharacterAttribute.first == NS_ooxml::LN_CT_NonVisualDrawingProps_name
             || rCharacterAttribute.first == NS_ooxml::LN_CT_NonVisualDrawingProps_descr)
             aDocprAttributes.set(rCharacterAttribute.first, rCharacterAttribute.second);
@@ -1075,7 +1075,7 @@ void RTFDocumentImpl::resolvePict(bool const bInline, uno::Reference<drawing::XS
             NS_ooxml::LN_CT_Anchor_behindDoc,
             new RTFValue((m_aStates.top().getShape().getInBackground()) ? 1 : 0));
         RTFSprms aAnchorSprms;
-        for (auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
+        for (const auto& rCharacterAttribute : m_aStates.top().getCharacterAttributes())
         {
             if (rCharacterAttribute.first == NS_ooxml::LN_CT_WrapSquare_wrapText)
                 aAnchorWrapAttributes.set(rCharacterAttribute.first, rCharacterAttribute.second);
@@ -2218,7 +2218,7 @@ RTFError RTFDocumentImpl::popState()
         }
         break;
         case Destination::LISTENTRY:
-            for (auto& rListLevelEntry : aState.getListLevelEntries())
+            for (const auto& rListLevelEntry : aState.getListLevelEntries())
                 aState.getTableSprms().set(rListLevelEntry.first, rListLevelEntry.second,
                                            RTFOverwrite::NO_APPEND);
             break;
@@ -2402,7 +2402,7 @@ RTFError RTFDocumentImpl::popState()
                     auto pValue = new RTFValue(m_aStates.top().getShape());
 
                     // Buffer wrap type.
-                    for (auto& rCharacterSprm : m_aStates.top().getCharacterSprms())
+                    for (const auto& rCharacterSprm : m_aStates.top().getCharacterSprms())
                     {
                         if (rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapNone
                             || rCharacterSprm.first == NS_ooxml::LN_EG_WrapType_wrapTight)
@@ -2419,7 +2419,7 @@ RTFError RTFDocumentImpl::popState()
             else if (aState.getInShapeGroup() && !aState.getInShape())
             {
                 // End of a groupshape, as we're in shapegroup, but not in a real shape.
-                for (auto& rGroupProperty : aState.getShape().getGroupProperties())
+                for (const auto& rGroupProperty : aState.getShape().getGroupProperties())
                     m_pSdrImport->appendGroupProperty(rGroupProperty.first, rGroupProperty.second);
                 aState.getShape().getGroupProperties().clear();
             }
diff --git a/writerfilter/source/rtftok/rtfsdrimport.cxx b/writerfilter/source/rtftok/rtfsdrimport.cxx
index 9a904e1058d7..2545b93c552c 100644
--- a/writerfilter/source/rtftok/rtfsdrimport.cxx
+++ b/writerfilter/source/rtftok/rtfsdrimport.cxx
@@ -329,7 +329,7 @@ int RTFSdrImport::initShape(uno::Reference<drawing::XShape>& o_xShape,
                 createShape("com.sun.star.text.TextFrame", o_xShape, o_xPropSet);
                 m_bTextFrame = true;
                 std::vector<beans::PropertyValue> aDefaults = getTextFrameDefaults(true);
-                for (beans::PropertyValue& i : aDefaults)
+                for (const beans::PropertyValue& i : aDefaults)
                     o_xPropSet->setPropertyValue(i.Name, i.Value);
                 break;
             }
diff --git a/writerfilter/source/rtftok/rtfsprm.cxx b/writerfilter/source/rtftok/rtfsprm.cxx
index 109dd20474e5..7ede5a30e2b9 100644
--- a/writerfilter/source/rtftok/rtfsprm.cxx
+++ b/writerfilter/source/rtftok/rtfsprm.cxx
@@ -365,7 +365,7 @@ RTFSprms RTFSprms::cloneAndDeduplicate(RTFSprms& rReference, Id const nStyleType
         // addition of direct formatting sprms at the paragraph level.
         if (bImplicitPPr && rSprm.first == NS_ooxml::LN_CT_Style_pPr)
         {
-            for (auto& i : rSprm.second->getSprms())
+            for (const auto& i : rSprm.second->getSprms())
                 cloneAndDeduplicateSprm(i, ret, nStyleType);
         }
         else
diff --git a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
index a703fb79be7f..6892052011b2 100644
--- a/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
+++ b/xmlsecurity/source/xmlsec/nss/securityenvironment_nssimpl.cxx
@@ -836,7 +836,7 @@ xmlSecKeysMngrPtr SecurityEnvironment_NssImpl::createKeysManager() {
     std::unique_ptr<PK11SlotInfo*[]> sarSlots(new PK11SlotInfo*[cSlots]);
     PK11SlotInfo**  slots = sarSlots.get();
     int count = 0;
-    for (auto& slot : m_Slots)
+    for (const auto& slot : m_Slots)
     {
         slots[count] = slot;
         ++count;


More information about the Libreoffice-commits mailing list