GCC Code Coverage Report


Directory: ./
Coverage: low: ≥ 0% medium: ≥ 75.0% high: ≥ 90.0%
Coverage Exec / Excl / Total
Lines: 100.0% 30 / 0 / 30
Functions: 100.0% 1 / 0 / 1
Branches: 100.0% 18 / 0 / 18

libs/url/src/rfc/query_rule.cpp
Line Branch Exec Source
1 //
2 // Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com)
3 //
4 // Distributed under the Boost Software License, Version 1.0. (See accompanying
5 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
6 //
7 // Official repository: https://github.com/boostorg/url
8 //
9
10 #include <boost/url/detail/config.hpp>
11 #include <boost/url/rfc/query_rule.hpp>
12 #include "detail/charsets.hpp"
13 #include <boost/url/error.hpp>
14 #include <boost/url/grammar/hexdig_chars.hpp>
15
16 namespace boost {
17 namespace urls {
18
19 auto
20 611 implementation_defined::query_rule_t::
21 parse(
22 char const*& it,
23 char const* end
24 ) const noexcept ->
25 system::result<value_type>
26 {
27
2/2
✓ Branch 0 taken 34 times.
✓ Branch 1 taken 577 times.
611 if(it == end)
28 {
29 // empty string = 1 param
30 34 core::string_view str(it, 0);
31 34 return params_encoded_view(
32 68 detail::query_ref(str, 0, 1));
33 }
34 577 auto const it0 = it;
35 577 std::size_t dn = 0;
36 577 std::size_t nparam = 1;
37
2/2
✓ Branch 0 taken 7739 times.
✓ Branch 1 taken 382 times.
8121 while(it != end)
38 {
39
2/2
✓ Branch 0 taken 503 times.
✓ Branch 1 taken 7236 times.
7739 if(*it == '&')
40 {
41 503 ++nparam;
42 503 ++it;
43 503 continue;
44 }
45
2/2
✓ Branch 1 taken 6869 times.
✓ Branch 2 taken 367 times.
7236 if(detail::query_chars(*it))
46 {
47 6869 ++it;
48 6869 continue;
49 }
50
2/2
✓ Branch 0 taken 184 times.
✓ Branch 1 taken 183 times.
367 if(*it == '%')
51 {
52
4/4
✓ Branch 0 taken 175 times.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 172 times.
359 if(end - it < 3 ||
53
2/2
✓ Branch 1 taken 174 times.
✓ Branch 2 taken 1 time.
175 (!grammar::hexdig_chars(it[1]) ||
54
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 172 times.
174 !grammar::hexdig_chars(it[2])))
55 {
56 // missing valid HEXDIG
57 12 break;
58 }
59 172 it += 3;
60 172 dn += 2;
61 172 continue;
62 }
63 // got reserved character
64 183 break;
65 }
66 577 std::size_t const n(it - it0);
67 577 core::string_view str(it0, n);
68 577 return params_encoded_view(
69 1154 detail::query_ref(
70 577 str, n - dn, nparam));
71 }
72
73 } // urls
74 } // boost
75
76