From 5459e6ef2554005ec045b76195ef1ba813a2dd34 Mon Sep 17 00:00:00 2001 From: Michael Stahl Date: Mon, 2 May 2022 16:44:31 +0200 Subject: [PATCH] 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 Reviewed-by: Michael Stahl (cherry picked from commit 5801b887629dbd784116ec6878b61bb99e991647) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/133723 Reviewed-by: Adolfo Jayme Barrientos --- ucb/source/ucp/webdav-curl/webdavcontent.cxx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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, -- 2.11.4.GIT