GCC Code Coverage Report


Directory: libs/url/
File: libs/url/src/rfc/detail/userinfo_rule.cpp
Date: 2024-02-29 20:02:56
Exec Total Coverage
Lines: 19 20 95.0%
Functions: 1 1 100.0%
Branches: 7 8 87.5%

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 #ifndef BOOST_URL_RFC_DETAIL_IMPL_USERINFO_RULE_IPP
11 #define BOOST_URL_RFC_DETAIL_IMPL_USERINFO_RULE_IPP
12
13 #include <boost/url/detail/config.hpp>
14 #include "userinfo_rule.hpp"
15 #include <boost/core/detail/string_view.hpp>
16 #include <boost/url/rfc/pct_encoded_rule.hpp>
17 #include <boost/url/rfc/sub_delim_chars.hpp>
18 #include <boost/url/rfc/unreserved_chars.hpp>
19 #include <boost/url/grammar/parse.hpp>
20
21 namespace boost {
22 namespace urls {
23 namespace detail {
24
25 auto
26 1794 userinfo_rule_t::
27 parse(
28 char const*& it,
29 char const* const end
30 ) const noexcept ->
31 system::result<value_type>
32 {
33 static constexpr auto uchars =
34 unreserved_chars +
35 sub_delim_chars;
36 static constexpr auto pwchars =
37 uchars + ':';
38
39 1794 value_type t;
40
41 // user
42 auto rv = grammar::parse(
43 1794 it, end, pct_encoded_rule(
44 1794 grammar::ref(uchars)));
45
2/2
✓ Branch 1 taken 8 times.
✓ Branch 2 taken 1786 times.
1794 if(! rv)
46 8 return rv.error();
47 1786 t.user = *rv;
48
49 // ':'
50
2/2
✓ Branch 0 taken 1529 times.
✓ Branch 1 taken 257 times.
1786 if( it == end ||
51
2/2
✓ Branch 0 taken 1124 times.
✓ Branch 1 taken 405 times.
1529 *it != ':')
52 {
53 1381 t.has_password = false;
54 1381 t.password = {};
55 1381 return t;
56 }
57 405 ++it;
58
59 // pass
60 rv = grammar::parse(
61 405 it, end, pct_encoded_rule(
62 405 grammar::ref(pwchars)));
63
1/2
✗ Branch 1 not taken.
✓ Branch 2 taken 405 times.
405 if(! rv)
64 return rv.error();
65
66 405 t.has_password = true;
67 405 t.password = *rv;
68 405 return t;
69 }
70
71 } // detail
72 } // urls
73 } // boost
74
75 #endif
76