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 583 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 33 times.
✓ Branch 1 taken 550 times.
583 if(it == end)
28 {
29 // empty string = 1 param
30 33 core::string_view str(it, 0);
31 33 return params_encoded_view(
32 66 detail::query_ref(str, 0, 1));
33 }
34 550 auto const it0 = it;
35 550 std::size_t dn = 0;
36 550 std::size_t nparam = 1;
37
2/2
✓ Branch 0 taken 6884 times.
✓ Branch 1 taken 370 times.
7254 while(it != end)
38 {
39
2/2
✓ Branch 0 taken 471 times.
✓ Branch 1 taken 6413 times.
6884 if(*it == '&')
40 {
41 471 ++nparam;
42 471 ++it;
43 471 continue;
44 }
45
2/2
✓ Branch 1 taken 6093 times.
✓ Branch 2 taken 320 times.
6413 if(detail::query_chars(*it))
46 {
47 6093 ++it;
48 6093 continue;
49 }
50
2/2
✓ Branch 0 taken 152 times.
✓ Branch 1 taken 168 times.
320 if(*it == '%')
51 {
52
4/4
✓ Branch 0 taken 143 times.
✓ Branch 1 taken 9 times.
✓ Branch 2 taken 12 times.
✓ Branch 3 taken 140 times.
295 if(end - it < 3 ||
53
2/2
✓ Branch 1 taken 142 times.
✓ Branch 2 taken 1 time.
143 (!grammar::hexdig_chars(it[1]) ||
54
2/2
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 140 times.
142 !grammar::hexdig_chars(it[2])))
55 {
56 // missing valid HEXDIG
57 12 break;
58 }
59 140 it += 3;
60 140 dn += 2;
61 140 continue;
62 }
63 // got reserved character
64 168 break;
65 }
66 550 std::size_t const n(it - it0);
67 550 core::string_view str(it0, n);
68 550 return params_encoded_view(
69 1100 detail::query_ref(
70 550 str, n - dn, nparam));
71 }
72
73 } // urls
74 } // boost
75
76