# HG changeset patch # User Alain Mazy # Date 1674665769 -3600 # Node ID 95d8e0540219533920a4820797c84ee17edb6407 # Parent 45ce9dfa42e0fcd88c9fcd77c811dcb4c7dc1312 avoid double '/' in HttpClient uri diff -r 45ce9dfa42e0 -r 95d8e0540219 OrthancFramework/Sources/HttpClient.cpp --- a/OrthancFramework/Sources/HttpClient.cpp Tue Jan 24 15:05:40 2023 +0100 +++ b/OrthancFramework/Sources/HttpClient.cpp Wed Jan 25 17:56:09 2023 +0100 @@ -682,7 +682,7 @@ SetPkcs11Enabled(service.IsPkcs11Enabled()); - SetUrl(service.GetUrl() + uri); + SetUrl(Toolbox::JoinUri(service.GetUrl(), uri)); for (WebServiceParameters::Dictionary::const_iterator it = service.GetHttpHeaders().begin(); diff -r 45ce9dfa42e0 -r 95d8e0540219 OrthancFramework/Sources/Toolbox.cpp --- a/OrthancFramework/Sources/Toolbox.cpp Tue Jan 24 15:05:40 2023 +0100 +++ b/OrthancFramework/Sources/Toolbox.cpp Wed Jan 25 17:56:09 2023 +0100 @@ -414,6 +414,23 @@ } } + std::string Toolbox::JoinUri(const std::string& base, const std::string& uri) + { + if (uri.size() > 0 && base.size() > 0) + { + if (base[base.size() - 1] == '/' && uri[0] == '/') + { + return base + uri.substr(1, uri.size() - 1); + } + else if (base[base.size() - 1] != '/' && uri[0] != '/') + { + return base + "/" + uri; + } + } + + return base + uri; + } + #if ORTHANC_ENABLE_MD5 == 1 static char GetHexadecimalCharacter(uint8_t value) diff -r 45ce9dfa42e0 -r 95d8e0540219 OrthancFramework/Sources/Toolbox.h --- a/OrthancFramework/Sources/Toolbox.h Tue Jan 24 15:05:40 2023 +0100 +++ b/OrthancFramework/Sources/Toolbox.h Wed Jan 25 17:56:09 2023 +0100 @@ -119,6 +119,8 @@ static std::string FlattenUri(const UriComponents& components, size_t fromLevel = 0); + static std::string JoinUri(const std::string& base, const std::string& uri); + #if ORTHANC_ENABLE_MD5 == 1 static void ComputeMD5(std::string& result, const std::string& data); diff -r 45ce9dfa42e0 -r 95d8e0540219 OrthancFramework/UnitTestsSources/ToolboxTests.cpp --- a/OrthancFramework/UnitTestsSources/ToolboxTests.cpp Tue Jan 24 15:05:40 2023 +0100 +++ b/OrthancFramework/UnitTestsSources/ToolboxTests.cpp Wed Jan 25 17:56:09 2023 +0100 @@ -322,3 +322,14 @@ ASSERT_EQ("1\\2", result); } } + +TEST(Toolbox, JoinUri) +{ + ASSERT_EQ("https://test.org/path", Toolbox::JoinUri("https://test.org", "path")); + ASSERT_EQ("https://test.org/path", Toolbox::JoinUri("https://test.org/", "path")); + ASSERT_EQ("https://test.org/path", Toolbox::JoinUri("https://test.org", "/path")); + ASSERT_EQ("https://test.org/path", Toolbox::JoinUri("https://test.org/", "/path")); + + ASSERT_EQ("http://test.org:8042", Toolbox::JoinUri("http://test.org:8042", "")); + ASSERT_EQ("http://test.org:8042/", Toolbox::JoinUri("http://test.org:8042/", "")); +} \ No newline at end of file