GCC Code Coverage Report


Directory: ./
File: libs/http/src/error.cpp
Date: 2026-01-20 00:11:35
Exec Total Coverage
Lines: 22 63 34.9%
Functions: 4 7 57.1%
Branches: 15 51 29.4%

Line Branch Exec Source
1 //
2 // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.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/cppalliance/http
8 //
9
10 #include <boost/http/error.hpp>
11 #include <boost/url/grammar/error.hpp>
12 #include <boost/assert.hpp>
13 #include <cstring>
14
15 namespace boost {
16 namespace http {
17
18 namespace detail {
19
20 const char*
21 14 error_cat_type::
22 name() const noexcept
23 {
24 14 return "boost.http";
25 }
26
27 std::string
28 81 error_cat_type::
29 message(int code) const
30 {
31
1/1
✓ Branch 2 taken 81 times.
162 return message(code, nullptr, 0);
32 }
33
34 char const*
35 81 error_cat_type::
36 message(
37 int code,
38 char*,
39 std::size_t) const noexcept
40 {
41
5/34
✗ Branch 0 not taken.
✗ Branch 1 not taken.
✗ Branch 2 not taken.
✗ Branch 3 not taken.
✗ Branch 4 not taken.
✓ Branch 5 taken 2 times.
✗ Branch 6 not taken.
✗ Branch 7 not taken.
✓ Branch 8 taken 66 times.
✓ Branch 9 taken 2 times.
✓ Branch 10 taken 9 times.
✗ Branch 11 not taken.
✗ Branch 12 not taken.
✗ Branch 13 not taken.
✗ Branch 14 not taken.
✗ Branch 15 not taken.
✗ Branch 16 not taken.
✗ Branch 17 not taken.
✗ Branch 18 not taken.
✗ Branch 19 not taken.
✗ Branch 20 not taken.
✗ Branch 21 not taken.
✗ Branch 22 not taken.
✗ Branch 23 not taken.
✗ Branch 24 not taken.
✗ Branch 25 not taken.
✗ Branch 26 not taken.
✗ Branch 27 not taken.
✗ Branch 28 not taken.
✗ Branch 29 not taken.
✗ Branch 30 not taken.
✗ Branch 31 not taken.
✓ Branch 32 taken 2 times.
✗ Branch 33 not taken.
81 switch(static_cast<error>(code))
42 {
43 case error::expect_100_continue: return "expect 100 continue";
44 case error::end_of_message: return "end of message";
45 case error::end_of_stream: return "end of stream";
46 case error::in_place_overflow: return "in place overflow";
47 case error::need_data: return "need data";
48
49 2 case error::bad_connection: return "bad Connection";
50 case error::bad_content_length: return "bad Content-Length";
51 case error::bad_expect: return "bad Expect";
52 66 case error::bad_field_name: return "bad field name";
53 2 case error::bad_field_value: return "bad field value";
54 9 case error::bad_field_smuggle: return "bad field smuggle";
55 case error::bad_line_ending: return "bad line ending";
56 case error::bad_list: return "bad list";
57 case error::bad_method: return "bad method";
58 case error::bad_number: return "bad number";
59 case error::bad_payload: return "bad payload";
60 case error::bad_version: return "bad version";
61 case error::bad_reason: return "bad reason-phrase";
62 case error::bad_request_target: return "bad request-target";
63 case error::bad_status_code: return "bad status-code";
64 case error::bad_status_line: return "bad status-line";
65 case error::bad_transfer_encoding: return "bad Transfer-Encoding";
66 case error::bad_upgrade: return "bad Upgrade";
67
68 case error::body_too_large: return "body too large";
69 case error::headers_limit: return "headers limit";
70 case error::start_line_limit: return "start line limit";
71 case error::field_size_limit: return "field size limit";
72 case error::fields_limit: return "fields limit";
73 case error::incomplete: return "incomplete";
74
75 case error::numeric_overflow: return "numeric overflow";
76 case error::multiple_content_length: return "multiple Content-Length";
77 case error::buffer_overflow: return "buffer overflow";
78 2 case error::unhandled_exception: return "unhandled exception";
79 default:
80 return "unknown";
81 }
82 }
83
84 //-----------------------------------------------
85
86 const char*
87 condition_cat_type::
88 name() const noexcept
89 {
90 return "boost.http";
91 }
92
93 std::string
94 condition_cat_type::
95 message(int code) const
96 {
97 return message(code, nullptr, 0);
98 }
99
100 char const*
101 condition_cat_type::
102 message(
103 int code,
104 char*,
105 std::size_t) const noexcept
106 {
107 switch(static_cast<condition>(code))
108 {
109 default:
110 case condition::need_more_input: return "need more input";
111 case condition::invalid_payload: return "invalid body octets received";
112 }
113 }
114
115 bool
116 86761 condition_cat_type::
117 equivalent(
118 system::error_code const& ec,
119 int code) const noexcept
120 {
121
2/3
✓ Branch 0 taken 9 times.
✓ Branch 1 taken 86752 times.
✗ Branch 2 not taken.
86761 switch(static_cast<condition>(code))
122 {
123 9 case condition::invalid_payload:
124 9 return (ec == error::bad_payload);
125
126 86752 case condition::need_more_input:
127
4/4
✓ Branch 2 taken 74002 times.
✓ Branch 3 taken 12750 times.
✓ Branch 4 taken 58317 times.
✓ Branch 5 taken 15685 times.
160754 if( ec == urls::grammar::error::need_more ||
128
2/2
✓ Branch 2 taken 71067 times.
✓ Branch 3 taken 15685 times.
160754 ec == error::need_data )
129 71067 return true;
130 15685 break;
131
132 default:
133 break;
134 }
135 return
136
1/4
✗ Branch 2 not taken.
✓ Branch 3 taken 15685 times.
✗ Branch 4 not taken.
✗ Branch 5 not taken.
15685 *this == ec.category() &&
137 15685 ec.value() == code;
138 }
139
140 //-----------------------------------------------
141
142 // msvc 14.0 has a bug that warns about inability
143 // to use constexpr construction here, even though
144 // there's no constexpr construction
145 #if defined(_MSC_VER) && _MSC_VER <= 1900
146 # pragma warning( push )
147 # pragma warning( disable : 4592 )
148 #endif
149
150 #if defined(__cpp_constinit) && __cpp_constinit >= 201907L
151 constinit error_cat_type error_cat;
152 constinit condition_cat_type condition_cat;
153 #else
154 error_cat_type error_cat;
155 condition_cat_type condition_cat;
156 #endif
157
158 #if defined(_MSC_VER) && _MSC_VER <= 1900
159 # pragma warning( pop )
160 #endif
161
162 } // detail
163
164 } // http
165 } // boost
166