From 8df6dccd96e9a170f33d43a3fb8bd6200fc0132f Mon Sep 17 00:00:00 2001 From: Glyn Matthews Date: Tue, 2 Sep 2014 19:28:53 +0200 Subject: [PATCH] Fixed bug in getting the authority when there are parts missing. --- boost/network/uri/uri.hpp | 43 +++++++++++++++++++++++++++--- libs/network/test/uri/uri_test.cpp | 6 +++++ 2 files changed, 45 insertions(+), 4 deletions(-) diff --git a/boost/network/uri/uri.hpp b/boost/network/uri/uri.hpp index f798633b4..cc851bead 100644 --- a/boost/network/uri/uri.hpp +++ b/boost/network/uri/uri.hpp @@ -263,14 +263,49 @@ uri::string_type fragment(const uri &uri_) { inline uri::string_type hierarchical_part(const uri &uri_) { - return uri::string_type(boost::begin(uri_.user_info_range()), - boost::end(uri_.path_range())); + uri::string_type::const_iterator first, last; + uri::const_range_type user_info = uri_.user_info_range(); + uri::const_range_type host = uri_.host_range(); + uri::const_range_type port = uri_.port_range(); + uri::const_range_type path = uri_.path_range(); + if (user_info) { + first = boost::begin(user_info); + } + else { + first = boost::begin(host); + } + if (path) { + last = boost::end(path); + } + else if (port) { + last = boost::end(port); + } + else { + last = boost::end(host); + } + return uri::string_type(first, last); } inline uri::string_type authority(const uri &uri_) { - return uri::string_type(boost::begin(uri_.user_info_range()), - boost::end(uri_.port_range())); + uri::string_type::const_iterator first, last; + uri::const_range_type user_info = uri_.user_info_range(); + uri::const_range_type host = uri_.host_range(); + uri::const_range_type port = uri_.port_range(); + if (user_info) { + first = boost::begin(user_info); + } + else { + first = boost::begin(host); + } + + if (port) { + last = boost::end(port); + } + else { + last = boost::end(host); + } + return uri::string_type(first, last); } inline diff --git a/libs/network/test/uri/uri_test.cpp b/libs/network/test/uri/uri_test.cpp index fab7c1b35..5fe7db46b 100644 --- a/libs/network/test/uri/uri_test.cpp +++ b/libs/network/test/uri/uri_test.cpp @@ -556,3 +556,9 @@ BOOST_AUTO_TEST_CASE(issue_161_test) { BOOST_CHECK_EQUAL(uri::decoded(queries["param2"]), "some plus encoded text"); } + +BOOST_AUTO_TEST_CASE(issue_364_test) { + uri::uri instance; + uri::schemes::http(instance) << uri::host("my.awesome.server.com"); + BOOST_CHECK_EQUAL("my.awesome.server.com", uri::authority(instance)); +}