diff options
Diffstat (limited to 'src/microhttpd/connection.c')
-rw-r--r-- | src/microhttpd/connection.c | 134 |
1 files changed, 85 insertions, 49 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c index 52dbfb3f..bfe5b820 100644 --- a/src/microhttpd/connection.c +++ b/src/microhttpd/connection.c | |||
@@ -5062,11 +5062,14 @@ get_req_header (struct MHD_Connection *c, | |||
5062 | } | 5062 | } |
5063 | else if (! bare_cr_keep) | 5063 | else if (! bare_cr_keep) |
5064 | { | 5064 | { |
5065 | transmit_error_response_static (c, | 5065 | if (! process_footers) |
5066 | MHD_HTTP_BAD_REQUEST, | 5066 | transmit_error_response_static (c, |
5067 | (! process_footers) ? | 5067 | MHD_HTTP_BAD_REQUEST, |
5068 | BARE_CR_IN_HEADER : | 5068 | BARE_CR_IN_HEADER); |
5069 | BARE_CR_IN_FOOTER); | 5069 | else |
5070 | transmit_error_response_static (c, | ||
5071 | MHD_HTTP_BAD_REQUEST, | ||
5072 | BARE_CR_IN_FOOTER); | ||
5070 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5073 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5071 | } | 5074 | } |
5072 | end_of_line = false; | 5075 | end_of_line = false; |
@@ -5088,10 +5091,14 @@ get_req_header (struct MHD_Connection *c, | |||
5088 | } | 5091 | } |
5089 | else | 5092 | else |
5090 | { | 5093 | { |
5091 | transmit_error_response_static (c, | 5094 | if (! process_footers) |
5092 | MHD_HTTP_BAD_REQUEST, | 5095 | transmit_error_response_static (c, |
5093 | (! process_footers) ? | 5096 | MHD_HTTP_BAD_REQUEST, |
5094 | BARE_LF_IN_HEADER : BARE_LF_IN_FOOTER); | 5097 | BARE_LF_IN_HEADER); |
5098 | else | ||
5099 | transmit_error_response_static (c, | ||
5100 | MHD_HTTP_BAD_REQUEST, | ||
5101 | BARE_LF_IN_FOOTER); | ||
5095 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5102 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5096 | } | 5103 | } |
5097 | } | 5104 | } |
@@ -5135,11 +5142,15 @@ get_req_header (struct MHD_Connection *c, | |||
5135 | /* Folded line */ | 5142 | /* Folded line */ |
5136 | if (! allow_folded) | 5143 | if (! allow_folded) |
5137 | { | 5144 | { |
5138 | transmit_error_response_static (c, | 5145 | if (! process_footers) |
5139 | MHD_HTTP_BAD_REQUEST, | 5146 | transmit_error_response_static (c, |
5140 | (! process_footers) ? | 5147 | MHD_HTTP_BAD_REQUEST, |
5141 | ERR_RSP_OBS_FOLD : | 5148 | ERR_RSP_OBS_FOLD); |
5142 | ERR_RSP_OBS_FOLD_FOOTER); | 5149 | else |
5150 | transmit_error_response_static (c, | ||
5151 | MHD_HTTP_BAD_REQUEST, | ||
5152 | ERR_RSP_OBS_FOLD_FOOTER); | ||
5153 | |||
5143 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5154 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5144 | } | 5155 | } |
5145 | /* Replace CRLF (or bare LF) character(s) with space characters. | 5156 | /* Replace CRLF (or bare LF) character(s) with space characters. |
@@ -5171,11 +5182,15 @@ get_req_header (struct MHD_Connection *c, | |||
5171 | { | 5182 | { |
5172 | if (! allow_line_without_colon) | 5183 | if (! allow_line_without_colon) |
5173 | { | 5184 | { |
5174 | transmit_error_response_static (c, | 5185 | if (! process_footers) |
5175 | MHD_HTTP_BAD_REQUEST, | 5186 | transmit_error_response_static (c, |
5176 | (! process_footers) ? | 5187 | MHD_HTTP_BAD_REQUEST, |
5177 | ERR_RSP_HEADER_WITHOUT_COLON : | 5188 | ERR_RSP_HEADER_WITHOUT_COLON); |
5178 | ERR_RSP_FOOTER_WITHOUT_COLON); | 5189 | else |
5190 | transmit_error_response_static (c, | ||
5191 | MHD_HTTP_BAD_REQUEST, | ||
5192 | ERR_RSP_FOOTER_WITHOUT_COLON); | ||
5193 | |||
5179 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5194 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5180 | } | 5195 | } |
5181 | /* Skip broken line completely */ | 5196 | /* Skip broken line completely */ |
@@ -5240,11 +5255,14 @@ get_req_header (struct MHD_Connection *c, | |||
5240 | { | 5255 | { |
5241 | if (! allow_wsp_at_start) | 5256 | if (! allow_wsp_at_start) |
5242 | { | 5257 | { |
5243 | transmit_error_response_static (c, | 5258 | if (! process_footers) |
5244 | MHD_HTTP_BAD_REQUEST, | 5259 | transmit_error_response_static (c, |
5245 | (! process_footers) ? | 5260 | MHD_HTTP_BAD_REQUEST, |
5246 | ERR_RSP_WSP_BEFORE_HEADER : | 5261 | ERR_RSP_WSP_BEFORE_HEADER); |
5247 | ERR_RSP_WSP_BEFORE_FOOTER); | 5262 | else |
5263 | transmit_error_response_static (c, | ||
5264 | MHD_HTTP_BAD_REQUEST, | ||
5265 | ERR_RSP_WSP_BEFORE_FOOTER); | ||
5248 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5266 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5249 | } | 5267 | } |
5250 | c->rq.hdrs.hdr.starts_with_ws = true; | 5268 | c->rq.hdrs.hdr.starts_with_ws = true; |
@@ -5260,11 +5278,15 @@ get_req_header (struct MHD_Connection *c, | |||
5260 | } | 5278 | } |
5261 | else | 5279 | else |
5262 | { | 5280 | { |
5263 | transmit_error_response_static (c, | 5281 | if (! process_footers) |
5264 | MHD_HTTP_BAD_REQUEST, | 5282 | transmit_error_response_static (c, |
5265 | (! process_footers) ? | 5283 | MHD_HTTP_BAD_REQUEST, |
5266 | ERR_RSP_WSP_IN_HEADER_NAME : | 5284 | ERR_RSP_WSP_IN_HEADER_NAME); |
5267 | ERR_RSP_WSP_IN_FOOTER_NAME); | 5285 | else |
5286 | transmit_error_response_static (c, | ||
5287 | MHD_HTTP_BAD_REQUEST, | ||
5288 | ERR_RSP_WSP_IN_FOOTER_NAME); | ||
5289 | |||
5268 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5290 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5269 | } | 5291 | } |
5270 | } | 5292 | } |
@@ -5279,11 +5301,15 @@ get_req_header (struct MHD_Connection *c, | |||
5279 | { | 5301 | { |
5280 | if (! nul_as_sp) | 5302 | if (! nul_as_sp) |
5281 | { | 5303 | { |
5282 | transmit_error_response_static (c, | 5304 | if (! process_footers) |
5283 | MHD_HTTP_BAD_REQUEST, | 5305 | transmit_error_response_static (c, |
5284 | (! process_footers) ? | 5306 | MHD_HTTP_BAD_REQUEST, |
5285 | ERR_RSP_INVALID_CHR_IN_HEADER : | 5307 | ERR_RSP_INVALID_CHR_IN_HEADER); |
5286 | ERR_RSP_INVALID_CHR_IN_FOOTER); | 5308 | else |
5309 | transmit_error_response_static (c, | ||
5310 | MHD_HTTP_BAD_REQUEST, | ||
5311 | ERR_RSP_INVALID_CHR_IN_FOOTER); | ||
5312 | |||
5287 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5313 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5288 | } | 5314 | } |
5289 | c->read_buffer[p] = ' '; | 5315 | c->read_buffer[p] = ' '; |
@@ -5308,11 +5334,14 @@ get_req_header (struct MHD_Connection *c, | |||
5308 | mhd_assert (allow_wsp_in_name || allow_wsp_before_colon); | 5334 | mhd_assert (allow_wsp_in_name || allow_wsp_before_colon); |
5309 | if (! allow_wsp_before_colon) | 5335 | if (! allow_wsp_before_colon) |
5310 | { | 5336 | { |
5311 | transmit_error_response_static (c, | 5337 | if (! process_footers) |
5312 | MHD_HTTP_BAD_REQUEST, | 5338 | transmit_error_response_static (c, |
5313 | (! process_footers) ? | 5339 | MHD_HTTP_BAD_REQUEST, |
5314 | ERR_RSP_WSP_IN_HEADER_NAME : | 5340 | ERR_RSP_WSP_IN_HEADER_NAME); |
5315 | ERR_RSP_WSP_IN_FOOTER_NAME); | 5341 | else |
5342 | transmit_error_response_static (c, | ||
5343 | MHD_HTTP_BAD_REQUEST, | ||
5344 | ERR_RSP_WSP_IN_FOOTER_NAME); | ||
5316 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5345 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5317 | } | 5346 | } |
5318 | c->rq.hdrs.hdr.name_len = c->rq.hdrs.hdr.ws_start; | 5347 | c->rq.hdrs.hdr.name_len = c->rq.hdrs.hdr.ws_start; |
@@ -5322,11 +5351,14 @@ get_req_header (struct MHD_Connection *c, | |||
5322 | } | 5351 | } |
5323 | if ((0 == c->rq.hdrs.hdr.name_len) && ! allow_empty_name) | 5352 | if ((0 == c->rq.hdrs.hdr.name_len) && ! allow_empty_name) |
5324 | { | 5353 | { |
5325 | transmit_error_response_static (c, | 5354 | if (! process_footers) |
5326 | MHD_HTTP_BAD_REQUEST, | 5355 | transmit_error_response_static (c, |
5327 | (! process_footers) ? | 5356 | MHD_HTTP_BAD_REQUEST, |
5328 | ERR_RSP_EMPTY_HEADER_NAME : | 5357 | ERR_RSP_EMPTY_HEADER_NAME); |
5329 | ERR_RSP_EMPTY_FOOTER_NAME); | 5358 | else |
5359 | transmit_error_response_static (c, | ||
5360 | MHD_HTTP_BAD_REQUEST, | ||
5361 | ERR_RSP_EMPTY_FOOTER_NAME); | ||
5330 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5362 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5331 | } | 5363 | } |
5332 | c->rq.hdrs.hdr.name_end_found = true; | 5364 | c->rq.hdrs.hdr.name_end_found = true; |
@@ -5340,11 +5372,15 @@ get_req_header (struct MHD_Connection *c, | |||
5340 | mhd_assert (allow_wsp_in_name || allow_wsp_before_colon); | 5372 | mhd_assert (allow_wsp_in_name || allow_wsp_before_colon); |
5341 | if (! allow_wsp_in_name) | 5373 | if (! allow_wsp_in_name) |
5342 | { | 5374 | { |
5343 | transmit_error_response_static (c, | 5375 | if (! process_footers) |
5344 | MHD_HTTP_BAD_REQUEST, | 5376 | transmit_error_response_static (c, |
5345 | (! process_footers) ? | 5377 | MHD_HTTP_BAD_REQUEST, |
5346 | ERR_RSP_WSP_IN_HEADER_NAME : | 5378 | ERR_RSP_WSP_IN_HEADER_NAME); |
5347 | ERR_RSP_WSP_IN_FOOTER_NAME); | 5379 | else |
5380 | transmit_error_response_static (c, | ||
5381 | MHD_HTTP_BAD_REQUEST, | ||
5382 | ERR_RSP_WSP_IN_FOOTER_NAME); | ||
5383 | |||
5348 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ | 5384 | return MHD_HDR_LINE_READING_DATA_ERROR; /* Error in the request */ |
5349 | } | 5385 | } |
5350 | #ifndef MHD_FAVOR_SMALL_CODE | 5386 | #ifndef MHD_FAVOR_SMALL_CODE |