diff options
author | Vincent Petry <PVince81@yahoo.fr> | 2021-01-05 12:04:08 +0100 |
---|---|---|
committer | Vincent Petry <PVince81@yahoo.fr> | 2021-01-05 12:04:08 +0100 |
commit | 74b2fc7fdca9be13cbbe4cb52b2fab573b3cf82c (patch) | |
tree | 985086fc8bf2afe7185a8017cc65ff609614e788 /src/storage/plugins | |
parent | 216f62ea1468933f4a78f17885b27e37e1393d8c (diff) |
Use uri_has_scheme for Webdav response href
Use uri_has_scheme to find out if the href in Webdav responses is absolute
to use the matching base path extraction.
Signed-off-by: Vincent Petry <PVince81@yahoo.fr>
Diffstat (limited to 'src/storage/plugins')
-rw-r--r-- | src/storage/plugins/CurlStorage.cxx | 19 |
1 files changed, 9 insertions, 10 deletions
diff --git a/src/storage/plugins/CurlStorage.cxx b/src/storage/plugins/CurlStorage.cxx index 298d70967..d717a824c 100644 --- a/src/storage/plugins/CurlStorage.cxx +++ b/src/storage/plugins/CurlStorage.cxx @@ -516,7 +516,6 @@ private: */ gcc_pure StringView HrefToEscapedName(const char *href) const noexcept { - StringView relative_path; StringView path = uri_get_path(href); if (path == nullptr) return nullptr; @@ -524,23 +523,23 @@ private: /* kludge: ignoring case in this comparison to avoid false negatives if the web server uses a different case */ - relative_path = StringAfterPrefixIgnoreCase(path, base_path.c_str()); - if (relative_path == nullptr || relative_path.empty()) { - // try relative base path - relative_path = StringAfterPrefixIgnoreCase(path, base_path_relative.c_str()); + if (uri_has_scheme(path)) { + path = StringAfterPrefixIgnoreCase(path, base_path.c_str()); + } else { + path = StringAfterPrefixIgnoreCase(path, base_path_relative.c_str()); } - if (relative_path == nullptr || relative_path.empty()) { + if (path == nullptr || path.empty()) { return nullptr; } - const char *slash = relative_path.Find('/'); + const char *slash = path.Find('/'); if (slash == nullptr) /* regular file */ - return relative_path; - else if (slash == &relative_path.back()) + return path; + else if (slash == &path.back()) /* trailing slash: collection; strip the slash */ - return {relative_path.data, slash}; + return {path.data, slash}; else /* strange, better ignore it */ return nullptr; |