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 216f62ea and part of 74b2fc7fSigned-off-by: 's avatarVincent Petry <PVince81@yahoo.fr>
parent e99f6b5b
...@@ -468,19 +468,11 @@ CurlStorage::GetInfo(std::string_view uri_utf8, [[maybe_unused]] bool follow) ...@@ -468,19 +468,11 @@ CurlStorage::GetInfo(std::string_view uri_utf8, [[maybe_unused]] bool follow)
gcc_pure gcc_pure
static std::string_view static std::string_view
UriPathOrSlash(const char *uri, bool relative) noexcept UriPathOrSlash(const char *uri) noexcept
{ {
auto path = uri_get_path(uri); auto path = uri_get_path(uri);
if (path.data() == nullptr) if (path.data() == nullptr)
path = "/"; 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; return path;
} }
...@@ -489,15 +481,13 @@ UriPathOrSlash(const char *uri, bool relative) noexcept ...@@ -489,15 +481,13 @@ UriPathOrSlash(const char *uri, bool relative) noexcept
*/ */
class HttpListDirectoryOperation final : public PropfindOperation { class HttpListDirectoryOperation final : public PropfindOperation {
const std::string base_path; const std::string base_path;
const std::string base_path_relative;
MemoryStorageDirectoryReader::List entries; MemoryStorageDirectoryReader::List entries;
public: public:
HttpListDirectoryOperation(CurlGlobal &curl, const char *uri) HttpListDirectoryOperation(CurlGlobal &curl, const char *uri)
:PropfindOperation(curl, uri, 1), :PropfindOperation(curl, uri, 1),
base_path(CurlUnescape(GetEasy(), UriPathOrSlash(uri, false))), base_path(CurlUnescape(GetEasy(), UriPathOrSlash(uri))) {}
base_path_relative(CurlUnescape(GetEasy(), UriPathOrSlash(uri, true))) {}
std::unique_ptr<StorageDirectoryReader> Perform() { std::unique_ptr<StorageDirectoryReader> Perform() {
DeferStart(); DeferStart();
...@@ -523,15 +513,9 @@ private: ...@@ -523,15 +513,9 @@ private:
/* kludge: ignoring case in this comparison to avoid /* kludge: ignoring case in this comparison to avoid
false negatives if the web server uses a different false negatives if the web server uses a different
case */ case */
if (uri_has_scheme(path)) { path = StringAfterPrefixIgnoreCase(path, base_path.c_str());
path = StringAfterPrefixIgnoreCase(path, base_path.c_str()); if (path == nullptr || path.empty())
} else {
path = StringAfterPrefixIgnoreCase(path, base_path_relative.c_str());
}
if (path == nullptr || path.empty()) {
return nullptr; return nullptr;
}
const char *slash = path.Find('/'); const char *slash = path.Find('/');
if (slash == nullptr) if (slash == nullptr)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment