diff options
author | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-02-24 20:26:35 +0300 |
---|---|---|
committer | Evgeny Grin (Karlson2k) <k2k@narod.ru> | 2023-06-20 22:59:07 +0300 |
commit | 69da856991eeb4fabf519552ff4c55708cb56d0a (patch) | |
tree | fdf3b86c42d71814f09d6e0297837bcc8e311690 | |
parent | 9141692ad5b1e50c414d1f0cd1eef39a5f30b087 (diff) | |
download | libmicrohttpd-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.c | 36 |
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; |