diff --git a/src/parse_query.cpp b/src/parse_query.cpp index 81b20544..817d0ce5 100644 --- a/src/parse_query.cpp +++ b/src/parse_query.cpp @@ -37,7 +37,7 @@ parse_query(core::string_view s) noexcept return rv.error(); return params_encoded_view( detail::query_ref( - s.data(), s.size(), rv->size())); + s, s.size(), rv->size())); } } // urls diff --git a/test/unit/parse_query.cpp b/test/unit/parse_query.cpp index d99b4b6f..f51d35c2 100644 --- a/test/unit/parse_query.cpp +++ b/test/unit/parse_query.cpp @@ -20,9 +20,36 @@ struct parse_query_test void testParse() { - system::result rv; + { + system::result rv; + rv = parse_query( "key=value" ); + BOOST_TEST( ! rv.has_error() ); + BOOST_TEST( rv->size() == 1 ); + BOOST_TEST( rv->begin()->key == "key" ); + BOOST_TEST( rv->begin()->value == "value" ); + } - rv = parse_query( "key=value" ); + // issue #757 + { + auto data = std::string("abc=def&ghi=jkl&mno=pqr"); + core::string_view view( data.data(), data.size() - 2 ); + system::result rv; + rv = parse_query( view ); + BOOST_TEST( ! rv.has_error() ); + params_encoded_view params = *rv; + BOOST_TEST( params.size() == 3 ); + auto it = params.begin(); + BOOST_TEST_EQ( it->key, "abc" ); + BOOST_TEST_EQ( it->value, "def" ); + ++it; + BOOST_TEST_EQ( it->key, "ghi" ); + BOOST_TEST_EQ( it->value, "jkl" ); + ++it; + BOOST_TEST_EQ( it->key, "mno" ); + BOOST_TEST_EQ( it->value, "p" ); + ++it; + BOOST_TEST( it == params.end() ); + } } void