[Libreoffice-commits] core.git: Branch 'libreoffice-4-4-4' - include/unotools sc/source sw/source unotools/source

Stephan Bergmann sbergman at redhat.com
Tue Jun 23 12:35:30 PDT 2015


 include/unotools/securityoptions.hxx                      |    2 
 sc/source/filter/xml/xmlimprt.cxx                         |   10 +
 sc/source/ui/docshell/docsh4.cxx                          |   18 ++-
 sw/source/core/doc/DocumentLinksAdministrationManager.cxx |   10 +
 sw/source/filter/xml/xmlimp.cxx                           |   80 +++++++-------
 unotools/source/config/securityoptions.cxx                |    8 +
 6 files changed, 85 insertions(+), 43 deletions(-)

New commits:
commit 59f9a0de39e4356220705bb6c4be66c956dc9c6d
Author: Stephan Bergmann <sbergman at redhat.com>
Date:   Tue Jun 23 08:26:36 2015 +0200

    LinkUpdateMode is a global setting
    
    (cherry picked from commit 77cc71476bae2b3655102e2c29d36af40a393201)
    Conflicts:
    	sw/source/core/doc/DocumentLinksAdministrationManager.cxx
    	sw/source/filter/xml/xmlimp.cxx
    
    Change-Id: Ida1257337c6e0916f2228fe053d9c9f085183af6
    Reviewed-on: https://gerrit.libreoffice.org/16424
    Reviewed-by: Miklos Vajna <vmiklos at collabora.co.uk>
    Reviewed-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>
    Tested-by: Christian Lohmaier <lohmaier+LibreOffice at googlemail.com>

diff --git a/include/unotools/securityoptions.hxx b/include/unotools/securityoptions.hxx
index 3bd8807..77e4720 100644
--- a/include/unotools/securityoptions.hxx
+++ b/include/unotools/securityoptions.hxx
@@ -186,6 +186,8 @@ class UNOTOOLS_DLLPUBLIC SAL_WARN_UNUSED SvtSecurityOptions : public utl::detail
         */
         bool isTrustedLocationUri(OUString const & uri) const;
 
+        bool isTrustedLocationUriForUpdatingLinks(OUString const & uri) const;
+
         ::com::sun::star::uno::Sequence< Certificate >  GetTrustedAuthors       (                                                                   ) const;
         void                                            SetTrustedAuthors       ( const ::com::sun::star::uno::Sequence< Certificate >& rAuthors    );
 
diff --git a/sc/source/filter/xml/xmlimprt.cxx b/sc/source/filter/xml/xmlimprt.cxx
index 1620f44..7b6bfb3 100644
--- a/sc/source/filter/xml/xmlimprt.cxx
+++ b/sc/source/filter/xml/xmlimprt.cxx
@@ -2593,6 +2593,9 @@ void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyVa
             OUString sCTName("TrackedChangesProtectionKey");
             OUString sVBName("VBACompatibilityMode");
             OUString sSCName("ScriptConfiguration");
+            css::uno::Sequence<css::beans::PropertyValue> aFilteredProps(
+                aConfigProps.getLength());
+            sal_Int32 nFilteredPropsLen = 0;
             for (sal_Int32 i = nCount - 1; i >= 0; --i)
             {
                 if (aConfigProps[i].Name == sCTName)
@@ -2627,11 +2630,16 @@ void ScXMLImport::SetConfigurationSettings(const uno::Sequence<beans::PropertyVa
                             xImportInfo->setPropertyValue( aConfigProps[i].Name, aConfigProps[i].Value );
                     }
                 }
+                if (aConfigProps[i].Name != "LinkUpdateMode")
+                {
+                    aFilteredProps[nFilteredPropsLen++] = aConfigProps[i];
+                }
             }
+            aFilteredProps.realloc(nFilteredPropsLen);
             uno::Reference <uno::XInterface> xInterface = xMultiServiceFactory->createInstance("com.sun.star.comp.SpreadsheetSettings");
             uno::Reference <beans::XPropertySet> xProperties(xInterface, uno::UNO_QUERY);
             if (xProperties.is())
-                SvXMLUnitConverter::convertPropertySet(xProperties, aConfigProps);
+                SvXMLUnitConverter::convertPropertySet(xProperties, aFilteredProps);
         }
     }
 }
diff --git a/sc/source/ui/docshell/docsh4.cxx b/sc/source/ui/docshell/docsh4.cxx
index 957e7a4..9d1f94f 100644
--- a/sc/source/ui/docshell/docsh4.cxx
+++ b/sc/source/ui/docshell/docsh4.cxx
@@ -48,6 +48,7 @@ using namespace ::com::sun::star;
 #include <svl/PasswordHelper.hxx>
 #include <svl/documentlockfile.hxx>
 #include <svl/sharecontrolfile.hxx>
+#include <unotools/securityoptions.hxx>
 
 #include <comphelper/processfactory.hxx>
 #include "docuno.hxx"
@@ -419,12 +420,23 @@ void ScDocShell::Execute( SfxRequest& rReq )
 
                 if (nCanUpdate == com::sun::star::document::UpdateDocMode::NO_UPDATE)
                     nSet = LM_NEVER;
-                else if (nCanUpdate == com::sun::star::document::UpdateDocMode::QUIET_UPDATE &&
-                    nSet == LM_ON_DEMAND)
-                    nSet = LM_NEVER;
                 else if (nCanUpdate == com::sun::star::document::UpdateDocMode::FULL_UPDATE)
                     nSet = LM_ALWAYS;
 
+                if (nSet == LM_ALWAYS
+                    && !(SvtSecurityOptions()
+                         .isTrustedLocationUriForUpdatingLinks(
+                             GetMedium() == nullptr
+                             ? OUString() : GetMedium()->GetName())))
+                {
+                    nSet = LM_ON_DEMAND;
+                }
+                if (nCanUpdate == css::document::UpdateDocMode::QUIET_UPDATE
+                    && nSet == LM_ON_DEMAND)
+                {
+                    nSet = LM_NEVER;
+                }
+
                 if(nSet==LM_ON_DEMAND)
                 {
                     QueryBox aBox( GetActiveDialogParent(), WinBits(WB_YES_NO | WB_DEF_YES),
diff --git a/sw/source/core/doc/DocumentLinksAdministrationManager.cxx b/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
index 1d596a4..086dd42 100644
--- a/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
+++ b/sw/source/core/doc/DocumentLinksAdministrationManager.cxx
@@ -44,6 +44,7 @@
 #include <ndtxt.hxx>
 #include <tools/urlobj.hxx>
 #include <unotools/charclass.hxx>
+#include <unotools/securityoptions.hxx>
 //#include <rtl/string.h>
 #include <boost/foreach.hpp>
 
@@ -224,6 +225,15 @@ void DocumentLinksAdministrationManager::UpdateLinks( bool bUI )
                 case document::UpdateDocMode::QUIET_UPDATE:bAskUpdate = false; break;
                 case document::UpdateDocMode::FULL_UPDATE: bAskUpdate = true; break;
             }
+            if (nLinkMode == AUTOMATIC && !bAskUpdate)
+            {
+                SfxMedium * medium = m_rDoc.GetDocShell()->GetMedium();
+                if (!SvtSecurityOptions().isTrustedLocationUriForUpdatingLinks(
+                        medium == nullptr ? OUString() : medium->GetName()))
+                {
+                    bAskUpdate = true;
+                }
+            }
             if( bUpdate && (bUI || !bAskUpdate) )
             {
                 SfxMedium* pMedium = m_rDoc.GetDocShell()->GetMedium();
diff --git a/sw/source/filter/xml/xmlimp.cxx b/sw/source/filter/xml/xmlimp.cxx
index ee30818..f59c732 100644
--- a/sw/source/filter/xml/xmlimp.cxx
+++ b/sw/source/filter/xml/xmlimp.cxx
@@ -1084,47 +1084,47 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
     if( !xInfo.is() )
         return;
 
-    boost::unordered_set< OUString, OUStringHash > aSet;
-    aSet.insert("ForbiddenCharacters");
-    aSet.insert("IsKernAsianPunctuation");
-    aSet.insert("CharacterCompressionType");
-    aSet.insert("LinkUpdateMode");
-    aSet.insert("FieldAutoUpdate");
-    aSet.insert("ChartAutoUpdate");
-    aSet.insert("AddParaTableSpacing");
-    aSet.insert("AddParaTableSpacingAtStart");
-    aSet.insert("PrintAnnotationMode");
-    aSet.insert("PrintBlackFonts");
-    aSet.insert("PrintControls");
-    aSet.insert("PrintDrawings");
-    aSet.insert("PrintGraphics");
-    aSet.insert("PrintLeftPages");
-    aSet.insert("PrintPageBackground");
-    aSet.insert("PrintProspect");
-    aSet.insert("PrintReversed");
-    aSet.insert("PrintRightPages");
-    aSet.insert("PrintFaxName");
-    aSet.insert("PrintPaperFromSetup");
-    aSet.insert("PrintTables");
-    aSet.insert("PrintSingleJobs");
-    aSet.insert("UpdateFromTemplate");
-    aSet.insert("PrinterIndependentLayout");
-    aSet.insert("PrintEmptyPages");
-    aSet.insert("SmallCapsPercentage66");
-    aSet.insert("TabOverflow");
-    aSet.insert("UnbreakableNumberings");
-    aSet.insert("ClippedPictures");
-    aSet.insert("BackgroundParaOverDrawings");
-    aSet.insert("TabOverMargin");
-    aSet.insert("PropLineSpacingShrinksFirstLine");
-    aSet.insert("SubtractFlysAnchoredAtFlys");
+    boost::unordered_set< OUString, OUStringHash > aExcludeAlways;
+    aExcludeAlways.insert("LinkUpdateMode");
+    boost::unordered_set< OUString, OUStringHash > aExcludeWhenNotLoadingUserSettings;
+    aExcludeWhenNotLoadingUserSettings.insert("ForbiddenCharacters");
+    aExcludeWhenNotLoadingUserSettings.insert("IsKernAsianPunctuation");
+    aExcludeWhenNotLoadingUserSettings.insert("CharacterCompressionType");
+    aExcludeWhenNotLoadingUserSettings.insert("FieldAutoUpdate");
+    aExcludeWhenNotLoadingUserSettings.insert("ChartAutoUpdate");
+    aExcludeWhenNotLoadingUserSettings.insert("AddParaTableSpacing");
+    aExcludeWhenNotLoadingUserSettings.insert("AddParaTableSpacingAtStart");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintAnnotationMode");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintBlackFonts");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintControls");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintDrawings");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintGraphics");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintLeftPages");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintPageBackground");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintProspect");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintReversed");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintRightPages");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintFaxName");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintPaperFromSetup");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintTables");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintSingleJobs");
+    aExcludeWhenNotLoadingUserSettings.insert("UpdateFromTemplate");
+    aExcludeWhenNotLoadingUserSettings.insert("PrinterIndependentLayout");
+    aExcludeWhenNotLoadingUserSettings.insert("PrintEmptyPages");
+    aExcludeWhenNotLoadingUserSettings.insert("SmallCapsPercentage66");
+    aExcludeWhenNotLoadingUserSettings.insert("TabOverflow");
+    aExcludeWhenNotLoadingUserSettings.insert("UnbreakableNumberings");
+    aExcludeWhenNotLoadingUserSettings.insert("ClippedPictures");
+    aExcludeWhenNotLoadingUserSettings.insert("BackgroundParaOverDrawings");
+    aExcludeWhenNotLoadingUserSettings.insert("TabOverMargin");
+    aExcludeWhenNotLoadingUserSettings.insert("PropLineSpacingShrinksFirstLine");
+    aExcludeWhenNotLoadingUserSettings.insert("SubtractFlysAnchoredAtFlys");
 
     sal_Int32 nCount = aConfigProps.getLength();
     const PropertyValue* pValues = aConfigProps.getConstArray();
 
     SvtSaveOptions aSaveOpt;
-    bool bIsUserSetting = aSaveOpt.IsLoadUserSettings(),
-         bSet = bIsUserSetting;
+    bool bIsUserSetting = aSaveOpt.IsLoadUserSettings();
 
     // for some properties we don't want to use the application
     // default if they're missing. So we watch for them in the loop
@@ -1161,10 +1161,12 @@ void SwXMLImport::SetConfigurationSettings(const Sequence < PropertyValue > & aC
 
     while( nCount-- )
     {
-        if( !bIsUserSetting )
+        bool bSet = aExcludeAlways.find(pValues->Name) == aExcludeAlways.end();
+        if( bSet && !bIsUserSetting
+            && (aExcludeWhenNotLoadingUserSettings.find(pValues->Name)
+                != aExcludeWhenNotLoadingUserSettings.end()) )
         {
-            // test over the hash value if the entry is in the table.
-            bSet = aSet.find(pValues->Name) == aSet.end();
+            bSet = false;
         }
 
         if( bSet )
diff --git a/unotools/source/config/securityoptions.cxx b/unotools/source/config/securityoptions.cxx
index a699c1d..7aea3b7 100644
--- a/unotools/source/config/securityoptions.cxx
+++ b/unotools/source/config/securityoptions.cxx
@@ -1043,6 +1043,14 @@ bool SvtSecurityOptions::isTrustedLocationUri(OUString const & uri) const {
     return false;
 }
 
+bool SvtSecurityOptions::isTrustedLocationUriForUpdatingLinks(
+    OUString const & uri) const
+{
+    return GetMacroSecurityLevel() == 0 || uri.isEmpty()
+        || uri.startsWithIgnoreAsciiCase("private:")
+        || isTrustedLocationUri(uri);
+}
+
 sal_Int32 SvtSecurityOptions::GetMacroSecurityLevel() const
 {
     MutexGuard aGuard( GetInitMutex() );


More information about the Libreoffice-commits mailing list