aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeny Grin (Karlson2k) <k2k@narod.ru>2023-02-24 20:26:35 +0300
committerEvgeny Grin (Karlson2k) <k2k@narod.ru>2023-06-20 22:59:07 +0300
commit69da856991eeb4fabf519552ff4c55708cb56d0a (patch)
treefdf3b86c42d71814f09d6e0297837bcc8e311690
parent9141692ad5b1e50c414d1f0cd1eef39a5f30b087 (diff)
downloadlibmicrohttpd-69da856991eeb4fabf519552ff4c55708cb56d0a.tar.gz
libmicrohttpd-69da856991eeb4fabf519552ff4c55708cb56d0a.zip
Request body processing: removed impossible code paths
Some code paths are impossible. Removed and replaced with asserts. Also redundant checks are removed.
-rw-r--r--src/microhttpd/connection.c36
1 files changed, 10 insertions, 26 deletions
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 3fad127d..756aba4f 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -3402,24 +3402,7 @@ process_request_body (struct MHD_Connection *connection)
3402 3402
3403 connection->rq.some_payload_processed = false; 3403 connection->rq.some_payload_processed = false;
3404 3404
3405 if (NULL != connection->rp.response) 3405 mhd_assert (NULL == connection->rp.response);
3406 {
3407 /* TODO: discard all read buffer as early response
3408 * means that connection have to be closed. */
3409 /* already queued a response, discard remaining upload
3410 (but not more, there might be another request after it) */
3411 size_t purge;
3412
3413 purge = (size_t) MHD_MIN (connection->rq.remaining_upload_size,
3414 (uint64_t) connection->read_buffer_offset);
3415 connection->rq.remaining_upload_size -= purge;
3416 if (connection->read_buffer_offset > purge)
3417 memmove (connection->read_buffer,
3418 &connection->read_buffer[purge],
3419 connection->read_buffer_offset - purge);
3420 connection->read_buffer_offset -= purge;
3421 return;
3422 }
3423 3406
3424 buffer_head = connection->read_buffer; 3407 buffer_head = connection->read_buffer;
3425 available = connection->read_buffer_offset; 3408 available = connection->read_buffer_offset;
@@ -5704,24 +5687,25 @@ MHD_connection_handle_idle (struct MHD_Connection *connection)
5704 } 5687 }
5705 break; 5688 break;
5706 case MHD_CONNECTION_BODY_RECEIVING: 5689 case MHD_CONNECTION_BODY_RECEIVING:
5690 mhd_assert (0 != connection->rq.remaining_upload_size);
5691 mhd_assert (! connection->discard_request);
5692 mhd_assert (NULL == connection->rp.response);
5707 if (0 != connection->read_buffer_offset) 5693 if (0 != connection->read_buffer_offset)
5708 { 5694 {
5709 process_request_body (connection); /* loop call */ 5695 process_request_body (connection); /* loop call */
5710 if (MHD_CONNECTION_BODY_RECEIVING != connection->state) 5696 if (MHD_CONNECTION_BODY_RECEIVING != connection->state)
5711 continue; 5697 continue;
5712 } 5698 }
5713 if ( (0 == connection->rq.remaining_upload_size) || 5699 /* Modify here when response queue during data processing
5714 ( (MHD_SIZE_UNKNOWN == connection->rq.remaining_upload_size) && 5700 will be supported */
5715 (0 == connection->read_buffer_offset) && 5701 mhd_assert (! connection->discard_request);
5716 (connection->discard_request) ) ) 5702 mhd_assert (NULL == connection->rp.response);
5703 if (0 == connection->rq.remaining_upload_size)
5717 { 5704 {
5718 if ( (connection->rq.have_chunked_upload) && 5705 if (connection->rq.have_chunked_upload)
5719 (! connection->discard_request) )
5720 connection->state = MHD_CONNECTION_BODY_RECEIVED; 5706 connection->state = MHD_CONNECTION_BODY_RECEIVED;
5721 else 5707 else
5722 connection->state = MHD_CONNECTION_FULL_REQ_RECEIVED; 5708 connection->state = MHD_CONNECTION_FULL_REQ_RECEIVED;
5723 if (connection->suspended)
5724 break;
5725 continue; 5709 continue;
5726 } 5710 }
5727 break; 5711 break;