ucb/source/ucp/webdav-curl/webdavcontent.cxx |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

New commits:
commit 5459e6ef2554005ec045b76195ef1ba813a2dd34
Author:     Michael Stahl <[email protected]>
AuthorDate: Mon May 2 16:44:31 2022 +0200
Commit:     Adolfo Jayme Barrientos <[email protected]>
CommitDate: Wed May 4 16:34:39 2022 +0200

    tdf#148426 ucb: webdav-curl: fall-back to GET if OPTIONS status 500
    
    With the ndr.de server, OPTIONS on an image URL results in a status 500
    Internal Server Error and an unexpected closed connection:
    
    
16.591:info:ucb.ucp.webdav.curl:1634132:1634170:ucb/source/ucp/webdav-curl/CurlSession.cxx:285:
 debug log: 0x7f9c94004988: transfer closed with 222 bytes remaining to read
    
    Apparently Neon always reported the closed connection problem with a
    string:
    "Could not read response body: connection was closed by server"
    
    The HTTP status code is extracted in makeStatusCode() and the string
    doesn't contain it, so the status is reported as 0 up the stack.
    
    With curl, it can apparently happen that either CURLE_PARTIAL_FILE is
    returned, in which case the status is ignored and reported as 0,
    or CURLE_OK is returned and the status 500 is reported up the stack.
    
    Adapt the handling in Content::open() to fall back to GET in case of a
    500 status.
    
    Change-Id: I5f3dce7f67ce25c87bf3882c89e7ff2d386bcbad
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133707
    Tested-by: Jenkins
    Tested-by: Gabor Kelemen <[email protected]>
    Reviewed-by: Michael Stahl <[email protected]>
    (cherry picked from commit 5801b887629dbd784116ec6878b61bb99e991647)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133723
    Reviewed-by: Adolfo Jayme Barrientos <[email protected]>

diff --git a/ucb/source/ucp/webdav-curl/webdavcontent.cxx 
b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
index 513626b8d73b..8ae42ca09cfd 100644
--- a/ucb/source/ucp/webdav-curl/webdavcontent.cxx
+++ b/ucb/source/ucp/webdav-curl/webdavcontent.cxx
@@ -2254,7 +2254,9 @@ uno::Any Content::open(
                     DAVOptions aDAVOptions;
                     getResourceOptions( xEnv, aDAVOptions, xResAccess );
 
-                    if ( aDAVOptions.getHttpResponseStatusCode() != SC_NONE )
+                    if (aDAVOptions.getHttpResponseStatusCode() != SC_NONE
+                        // tdf#148426 fall back to GET in case of 500
+                        && aDAVOptions.getHttpResponseStatusCode() != 
SC_INTERNAL_SERVER_ERROR)
                     {
                         // throws exception as if there was a server error, a 
DAV exception
                         throw DAVException( DAVException::DAV_HTTP_ERROR,

Reply via email to