summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Petry <PVince81@yahoo.fr>2021-01-08 16:50:27 +0100
committerVincent Petry <PVince81@yahoo.fr>2021-01-08 16:50:27 +0100
commitec0d3ac95db0eb74aa618374dd97665b936c3c9c (patch)
tree8b31c3a7d937a72efc1b9b9e1bbb50ddcf8cb2a6
parente99f6b5b388a0480686c0659f8dfe07f5f9b61d0 (diff)
Remove relative path handling which was not needed
The original base relative path was introduced due to an erroneous test where the URL started with three slashes: "https:///" instead of two, which led to implementing handling for such cases but broke the two slashes case. This fix removes the base relative path handling because with two slashes the path is anyway always relative to the host (aka absolute URI, without host). This reverts 216f62ea1468933f4a78f17885b27e37e1393d8c and part of 74b2fc7fdca9be13cbbe4cb52b2fab573b3cf82c Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
-rw-r--r--src/storage/plugins/CurlStorage.cxx24
1 files changed, 4 insertions, 20 deletions
diff --git a/src/storage/plugins/CurlStorage.cxx b/src/storage/plugins/CurlStorage.cxx
index d717a824c..c986a8a49 100644
--- a/src/storage/plugins/CurlStorage.cxx
+++ b/src/storage/plugins/CurlStorage.cxx
@@ -468,19 +468,11 @@ CurlStorage::GetInfo(std::string_view uri_utf8, [[maybe_unused]] bool follow)
gcc_pure
static std::string_view
-UriPathOrSlash(const char *uri, bool relative) noexcept
+UriPathOrSlash(const char *uri) noexcept
{
auto path = uri_get_path(uri);
if (path.data() == nullptr)
path = "/";
- else if (relative) {
- // search after first slash
- path = path.substr(1);
- auto slash = path.find('/');
- if (slash != std::string_view::npos)
- path = path.substr(slash);
- }
-
return path;
}
@@ -489,15 +481,13 @@ UriPathOrSlash(const char *uri, bool relative) noexcept
*/
class HttpListDirectoryOperation final : public PropfindOperation {
const std::string base_path;
- const std::string base_path_relative;
MemoryStorageDirectoryReader::List entries;
public:
HttpListDirectoryOperation(CurlGlobal &curl, const char *uri)
:PropfindOperation(curl, uri, 1),
- base_path(CurlUnescape(GetEasy(), UriPathOrSlash(uri, false))),
- base_path_relative(CurlUnescape(GetEasy(), UriPathOrSlash(uri, true))) {}
+ base_path(CurlUnescape(GetEasy(), UriPathOrSlash(uri))) {}
std::unique_ptr<StorageDirectoryReader> Perform() {
DeferStart();
@@ -523,15 +513,9 @@ private:
/* kludge: ignoring case in this comparison to avoid
false negatives if the web server uses a different
case */
- if (uri_has_scheme(path)) {
- path = StringAfterPrefixIgnoreCase(path, base_path.c_str());
- } else {
- path = StringAfterPrefixIgnoreCase(path, base_path_relative.c_str());
- }
-
- if (path == nullptr || path.empty()) {
+ path = StringAfterPrefixIgnoreCase(path, base_path.c_str());
+ if (path == nullptr || path.empty())
return nullptr;
- }
const char *slash = path.Find('/');
if (slash == nullptr)