fs/Traits: allow base to end with a slash in Relative()

Fixes false negatives:

 http://foo/dav/example.ogg mismatches http://foo/dav/

.. because StringAfterPrefix() returns just "example.ogg", without
trailing slash (it existed, but was eaten already by the base
matcher).
This commit is contained in:
Max Kellermann 2017-02-24 13:50:29 +01:00
parent ca559b1db6
commit cd522f524d

View File

@ -99,9 +99,16 @@ RelativePathImpl(typename Traits::const_pointer_type base,
return nullptr;
if (*other != 0) {
if (!Traits::IsSeparator(*other))
if (!Traits::IsSeparator(*other)) {
if (*base != 0 && Traits::IsSeparator(other[-1]))
/* "other" has no more slash, but the
matching base ended with a slash:
enough to detect a match */
return other;
/* mismatch */
return nullptr;
}
/* skip remaining path separators */
do {