GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/grammar/dec_octet_rule.cpp
Date: 2024-08-20 16:05:55
Exec Total Coverage
Lines: 30 30 100.0%
Functions: 1 1 100.0%
Branches: 28 28 100.0%

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
11 #include <boost/url/detail/config.hpp>
12 #include <boost/url/grammar/charset.hpp>
13 #include <boost/url/grammar/dec_octet_rule.hpp>
14 #include <boost/url/grammar/digit_chars.hpp>
15 #include <boost/url/grammar/error.hpp>
16
17 namespace boost {
18 namespace urls {
19 namespace grammar {
20 namespace implementation_defined {
21 auto
22 2297 dec_octet_rule_t::
23 parse(
24 char const*& it,
25 char const* const end
26 ) const noexcept ->
27 system::result<value_type>
28 {
29
2/2
✓ Branch 0 taken 14 times.
✓ Branch 1 taken 2283 times.
2297 if(it == end)
30 {
31 // end
32 14 BOOST_URL_RETURN_EC(
33 error::mismatch);
34 }
35
2/2
✓ Branch 1 taken 1653 times.
✓ Branch 2 taken 630 times.
2283 if(! digit_chars(*it))
36 {
37 // expected DIGIT
38 1653 BOOST_URL_RETURN_EC(
39 error::mismatch);
40 }
41 630 unsigned v = *it - '0';
42 630 ++it;
43
4/4
✓ Branch 0 taken 564 times.
✓ Branch 1 taken 66 times.
✓ Branch 2 taken 424 times.
✓ Branch 3 taken 206 times.
1194 if( it == end ||
44
2/2
✓ Branch 1 taken 358 times.
✓ Branch 2 taken 206 times.
564 ! digit_chars(*it))
45 {
46 424 return static_cast<
47 424 value_type>(v);
48 }
49
2/2
✓ Branch 0 taken 11 times.
✓ Branch 1 taken 195 times.
206 if(v == 0)
50 {
51 // leading '0'
52 11 BOOST_URL_RETURN_EC(
53 error::invalid);
54 }
55 195 v = (10 * v) + *it - '0';
56 195 ++it;
57
4/4
✓ Branch 0 taken 191 times.
✓ Branch 1 taken 4 times.
✓ Branch 2 taken 23 times.
✓ Branch 3 taken 172 times.
386 if( it == end ||
58
2/2
✓ Branch 1 taken 19 times.
✓ Branch 2 taken 172 times.
191 ! digit_chars(*it))
59 {
60 23 return static_cast<
61 23 value_type>(v);
62 }
63
2/2
✓ Branch 0 taken 13 times.
✓ Branch 1 taken 159 times.
172 if(v > 25)
64 {
65 // integer overflow
66 13 BOOST_URL_RETURN_EC(
67 error::invalid);
68 }
69 159 v = (10 * v) + *it - '0';
70
2/2
✓ Branch 0 taken 17 times.
✓ Branch 1 taken 142 times.
159 if(v > 255)
71 {
72 // integer overflow
73 17 BOOST_URL_RETURN_EC(
74 error::invalid);
75 }
76 142 ++it;
77
6/6
✓ Branch 0 taken 130 times.
✓ Branch 1 taken 12 times.
✓ Branch 2 taken 7 times.
✓ Branch 3 taken 123 times.
✓ Branch 4 taken 7 times.
✓ Branch 5 taken 135 times.
272 if( it != end &&
78 130 digit_chars(*it))
79 {
80 // integer overflow
81 7 BOOST_URL_RETURN_EC(
82 error::invalid);
83 }
84 135 return static_cast<
85 135 value_type>(v);
86 }
87 } // implementation_defined
88 } // grammar
89 } // urls
90 } // boost
91
92