ucb/source/ucp/webdav-curl/CurlSession.cxx |   12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

New commits:
commit 261b1237532f431963358a7b4ac5fd1ad6e5d223
Author:     Michael Stahl <michael.st...@allotropia.de>
AuthorDate: Thu Jan 19 12:28:57 2023 +0100
Commit:     Michael Stahl <michael.st...@allotropia.de>
CommitDate: Thu Jan 19 15:05:57 2023 +0000

    tdf#153039 ucb: webdav-curl: fix POST, which was actually doing PUT
    
    The problem is that first CURLOPT_POST was set and later CURLOPT_UPLOAD,
    which overrides the HTTP method to PUT.  Move this out to the 4
    functions that need it.
    
    Change-Id: Ibd555dcc00a03baa1bb300a9ab9905f383179c67
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/145786
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.st...@allotropia.de>

diff --git a/ucb/source/ucp/webdav-curl/CurlSession.cxx 
b/ucb/source/ucp/webdav-curl/CurlSession.cxx
index 7353c8c9fa7e..1632881cb824 100644
--- a/ucb/source/ucp/webdav-curl/CurlSession.cxx
+++ b/ucb/source/ucp/webdav-curl/CurlSession.cxx
@@ -875,9 +875,6 @@ auto CurlProcessor::ProcessRequestImpl(
         oUploadSource.emplace(*pInData);
         rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_READDATA, 
&*oUploadSource);
         assert(rc == CURLE_OK);
-        // libcurl won't upload without setting this
-        rc = curl_easy_setopt(rSession.m_pCurl.get(), CURLOPT_UPLOAD, 1L);
-        assert(rc == CURLE_OK);
     }
     rSession.m_ErrorBuffer[0] = '\0';
 
@@ -1638,6 +1635,7 @@ auto CurlProcessor::PropFind(
     curl_off_t const len(xSeqOutStream->getWrittenBytes().getLength());
 
     ::std::vector<CurlOption> const options{
+        { CURLOPT_UPLOAD, 1L, nullptr },
         { CURLOPT_CUSTOMREQUEST, "PROPFIND", "CURLOPT_CUSTOMREQUEST" },
         // note: Sharepoint cannot handle "Transfer-Encoding: chunked"
         { CURLOPT_INFILESIZE_LARGE, len, nullptr, CurlOption::Type::CurlOffT }
@@ -1792,6 +1790,7 @@ auto CurlSession::PROPPATCH(OUString const& rURIReference,
     curl_off_t const len(xSeqOutStream->getWrittenBytes().getLength());
 
     ::std::vector<CurlOption> const options{
+        { CURLOPT_UPLOAD, 1L, nullptr },
         { CURLOPT_CUSTOMREQUEST, "PROPPATCH", "CURLOPT_CUSTOMREQUEST" },
         // note: Sharepoint cannot handle "Transfer-Encoding: chunked"
         { CURLOPT_INFILESIZE_LARGE, len, nullptr, CurlOption::Type::CurlOffT }
@@ -1945,8 +1944,10 @@ auto CurlSession::PUT(OUString const& rURIReference,
     // lock m_Mutex after accessing global LockStore to avoid deadlock
 
     // note: Nextcloud 20 cannot handle "Transfer-Encoding: chunked"
-    ::std::vector<CurlOption> const options{ { CURLOPT_INFILESIZE_LARGE, len, 
nullptr,
-                                               CurlOption::Type::CurlOffT } };
+    ::std::vector<CurlOption> const options{
+        { CURLOPT_UPLOAD, 1L, nullptr }, // libcurl won't upload without 
setting this
+        { CURLOPT_INFILESIZE_LARGE, len, nullptr, CurlOption::Type::CurlOffT }
+    };
 
     CurlProcessor::ProcessRequest(*this, uri, "PUT", options, &rEnv, 
::std::move(pList), nullptr,
                                   &rxInStream, nullptr);
@@ -2127,6 +2128,7 @@ auto CurlProcessor::Lock(
     }
 
     ::std::vector<CurlOption> const options{
+        { CURLOPT_UPLOAD, 1L, nullptr },
         { CURLOPT_CUSTOMREQUEST, "LOCK", "CURLOPT_CUSTOMREQUEST" },
         // note: Sharepoint cannot handle "Transfer-Encoding: chunked"
         { CURLOPT_INFILESIZE_LARGE, len, nullptr, CurlOption::Type::CurlOffT }

Reply via email to