Skip to content

Commit 63438e9

Browse files
committed
Fix #499 - Parsing empty query parameters
1 parent b5f6838 commit 63438e9

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

boost/network/uri/accessors.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ struct key_value_sequence : spirit::qi::grammar<uri::const_iterator, Map()> {
2727
pair = key >> -('=' >> value);
2828
key =
2929
spirit::qi::char_("a-zA-Z_") >> *spirit::qi::char_("-+.~a-zA-Z_0-9/%");
30-
value = +spirit::qi::char_("-+.~a-zA-Z_0-9/%");
30+
value = *spirit::qi::char_("-+.~a-zA-Z_0-9/%");
3131
}
3232

3333
spirit::qi::rule<uri::const_iterator, Map()> query;

libs/network/test/uri/uri_test.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -566,3 +566,16 @@ BOOST_AUTO_TEST_CASE(issue_447_test) {
566566
uri::uri instance("http://[www.foo.com/");
567567
BOOST_REQUIRE(!uri::valid(instance));
568568
}
569+
570+
BOOST_AUTO_TEST_CASE(issue_499_test) {
571+
uri::uri instance(
572+
"http://www.example.com/path?param1&param2=&param3=value");
573+
BOOST_REQUIRE(uri::valid(instance));
574+
575+
std::map<std::string, std::string> queries;
576+
uri::query_map(instance, queries);
577+
BOOST_REQUIRE_EQUAL(queries.size(), std::size_t(3));
578+
BOOST_CHECK_EQUAL(queries["param1"], "");
579+
BOOST_CHECK_EQUAL(queries["param2"], "");
580+
BOOST_CHECK_EQUAL(queries["param3"], "value");
581+
}

0 commit comments

Comments
 (0)