wsd/ClientSession.cpp |   25 ++++++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

New commits:
commit 5fe0a1455c95e5e23699801b951a000e5f8439e6
Author:     Eduard Ardeleanu <[email protected]>
AuthorDate: Fri May 24 09:57:06 2019 +0300
Commit:     Samuel Mehrbrodt <[email protected]>
CommitDate: Thu Jul 25 16:54:57 2019 +0200

    detecting password protected files on convertTo
    
    Fail-fast when a file cannot be converted, using convertTo REST API, if the 
file is password protected and the password wasn't received.
    
    Change-Id: I32d807bcecbbe72a38a70fec74caf13638803e1d
    Reviewed-on: https://gerrit.libreoffice.org/72891
    Reviewed-by: Jan Holesovsky <[email protected]>
    Tested-by: Jan Holesovsky <[email protected]>
    Reviewed-on: https://gerrit.libreoffice.org/76330
    Reviewed-by: Samuel Mehrbrodt <[email protected]>
    Tested-by: Samuel Mehrbrodt <[email protected]>

diff --git a/wsd/ClientSession.cpp b/wsd/ClientSession.cpp
index a1e6c9319..8854a8bd8 100644
--- a/wsd/ClientSession.cpp
+++ b/wsd/ClientSession.cpp
@@ -680,6 +680,9 @@ bool ClientSession::handleKitToClientMessage(const char* 
buffer, const int lengt
         return false;
     }
 
+
+    const bool isConvertTo = static_cast<bool>(_saveAsSocket);
+
 #ifndef MOBILEAPP
     LOOLWSD::dumpOutgoingTrace(docBroker->getJailId(), getId(), firstLine);
 #endif
@@ -736,13 +739,30 @@ bool ClientSession::handleKitToClientMessage(const char* 
buffer, const int lengt
                     errorKind == "passwordrequired:to-modify" ||
                     errorKind == "wrongpassword")
                 {
-                    forwardToClient(payload);
+                    if (isConvertTo)
+                    {
+                        Poco::Net::HTTPResponse response;
+                        
response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_UNAUTHORIZED);
+                        response.set("X-ERROR-KIND", errorKind);
+                        _saveAsSocket->send(response);
+
+                        // Conversion failed, cleanup fake session.
+                        LOG_TRC("Removing save-as ClientSession after 
conversion error.");
+                        // Remove us.
+                        docBroker->removeSession(getId());
+                        // Now terminate.
+                        docBroker->stop("Aborting saveas handler.");
+                    }
+                    else
+                    {
+                        forwardToClient(payload);
+                    }
                     return false;
                 }
             }
             else
             {
-                LOG_WRN("Other than load failure: " << errorKind);
+                LOG_WRN(errorCommand << " error failure: " << errorKind);
             }
         }
     }
@@ -774,7 +794,6 @@ bool ClientSession::handleKitToClientMessage(const char* 
buffer, const int lengt
 #ifndef MOBILEAPP
     else if (tokens.size() == 3 && tokens[0] == "saveas:")
     {
-        bool isConvertTo = static_cast<bool>(_saveAsSocket);
 
         std::string encodedURL;
         if (!getTokenString(tokens[1], "url", encodedURL))
_______________________________________________
Libreoffice-commits mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to