sfx2/source/view/viewfrm.cxx |   11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

New commits:
commit 7106ee81fe1b237217c199c649c847c6d31b5dd7
Author:     Stephan Bergmann <sberg...@redhat.com>
AuthorDate: Fri Jul 8 16:47:01 2022 +0200
Commit:     Stephan Bergmann <sberg...@redhat.com>
CommitDate: Fri Jul 8 20:16:36 2022 +0200

    rhbz#2104545: Only call utl::IsYounger when its result is actually used
    
    ...as it may be expensive, or even throw (uncaught) exceptions (as 
apparently
    happened at rhbz#2104545, throwing some css::uno::RuntimeException while 
aMedObj
    was an sftp URL).
    
    The two branches in the if statement's condition that will now potentially 
call
    physObjIsOlder are disjoint (one for aMedObj being a file URL, the other for
    aMedObj being any WebDAV-related URL), so there is no chance that this 
change
    accidentally causes utl::IsYounger to be called more often than it used to 
be
    called.
    
    Change-Id: I29a5f18a12a8b83ec603366db26451175b5622c9
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136904
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sberg...@redhat.com>
    (cherry picked from commit 3467491f68f9c43f30c7b2b3c81f4110ec625900)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/136919

diff --git a/sfx2/source/view/viewfrm.cxx b/sfx2/source/view/viewfrm.cxx
index 43c111216402..f0f539ca675d 100644
--- a/sfx2/source/view/viewfrm.cxx
+++ b/sfx2/source/view/viewfrm.cxx
@@ -269,6 +269,11 @@ bool AskPasswordToModify_Impl( const uno::Reference< 
task::XInteractionHandler >
 
     return bResult;
 }
+
+bool physObjIsOlder(INetURLObject const & aMedObj, INetURLObject const & 
aPhysObj) {
+    return ::utl::UCBContentHelper::IsYounger(aMedObj.GetMainURL( 
INetURLObject::DecodeMechanism::NONE),
+                                           aPhysObj.GetMainURL( 
INetURLObject::DecodeMechanism::NONE ) );
+}
 }
 
 void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
@@ -437,8 +442,6 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
             // etag tells that the cache representation (e.g. in LO) is 
different from the one on the server,
             // but tells nothing about the age
             // Details at this link: 
http://tools.ietf.org/html/rfc4918#section-15, section 15.7
-            bool const bPhysObjIsOlder = 
::utl::UCBContentHelper::IsYounger(aMedObj.GetMainURL( 
INetURLObject::DecodeMechanism::NONE),
-                                                                         
aPhysObj.GetMainURL( INetURLObject::DecodeMechanism::NONE ) );
             bool bIsWebDAV = aMedObj.isAnyKnownWebDAVScheme();
 
             // tdf#118938 Reload the document when the user enters the editing 
password,
@@ -446,8 +449,8 @@ void SfxViewFrame::ExecReload_Impl( SfxRequest& rReq )
             if ( ( !bNeedsReload && ( ( aMedObj.GetProtocol() == 
INetProtocol::File &&
                                         ( aMedObj.getFSysPath( 
FSysStyle::Detect ) != aPhysObj.getFSysPath( FSysStyle::Detect )
                                           || bPasswordEntered ) &&
-                                        !bPhysObjIsOlder)
-                                      || (bIsWebDAV && !bPhysObjIsOlder)
+                                        !physObjIsOlder(aMedObj, aPhysObj))
+                                      || (bIsWebDAV && 
!physObjIsOlder(aMedObj, aPhysObj))
                                       || ( pMed->IsRemote() && !bIsWebDAV ) ) )
                  || pVersionItem )
             // <- tdf#82744

Reply via email to