diff options
-rw-r--r-- | src/Uri.cpp | 18 | ||||
-rw-r--r-- | test/src/UriTests.cpp | 2 |
2 files changed, 18 insertions, 2 deletions
diff --git a/src/Uri.cpp b/src/Uri.cpp index fb9e1f8..4530595 100644 --- a/src/Uri.cpp +++ b/src/Uri.cpp @@ -1158,6 +1158,7 @@ namespace Uri { * This is the other URI from which to copy the query. */ void CopyQuery(const Uri& other) { + hasQuery = other.impl_->hasQuery; query = other.impl_->query; } @@ -1169,6 +1170,7 @@ namespace Uri { * This is the other URI from which to copy the query. */ void CopyFragment(const Uri& other) { + hasFragment = other.impl_->hasFragment; fragment = other.impl_->fragment; } @@ -1223,8 +1225,20 @@ namespace Uri { ) ) && (impl_->path == other.impl_->path) - && (impl_->query == other.impl_->query) - && (impl_->fragment == other.impl_->fragment) + && ( + (!impl_->hasQuery && !other.impl_->hasQuery) + || ( + (impl_->hasQuery && other.impl_->hasQuery) + && (impl_->query == other.impl_->query) + ) + ) + && ( + (!impl_->hasFragment && !other.impl_->hasFragment) + || ( + (impl_->hasFragment && other.impl_->hasFragment) + && (impl_->fragment == other.impl_->fragment) + ) + ) ); } diff --git a/test/src/UriTests.cpp b/test/src/UriTests.cpp index 75693cc..a57dea1 100644 --- a/test/src/UriTests.cpp +++ b/test/src/UriTests.cpp @@ -688,6 +688,8 @@ TEST(UriTests, ReferenceResolution) { {"http://example.com/", "/foo", "http://example.com/foo"}, {"http://example.com", "/foo/", "http://example.com/foo/"}, {"http://example.com/", "/foo/", "http://example.com/foo/"}, + {"http://example.com/", "?foo", "http://example.com/?foo"}, + {"http://example.com/", "#foo", "http://example.com/#foo"}, }; size_t index = 0; for (const auto& testVector : testVectors) { |