summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2022-11-03 16:31:02 +0800
committerluwenpeng <[email protected]>2022-11-03 16:47:13 +0800
commitd63b40db172908f429adf36bacb600369ef8ef09 (patch)
tree6ff7d00ffef472a223a618acd1050ccb2e9073bd
parentd4dc6394acc4b137f9a2b0d368ffd4b9a9046a83 (diff)
bugfix: TSG-12514 HTTP解析层未处理chunk编码的POST数据v4.6.20-20221104
-rw-r--r--plugin/protocol/http/src/http_half.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/plugin/protocol/http/src/http_half.cpp b/plugin/protocol/http/src/http_half.cpp
index 658625b..8044812 100644
--- a/plugin/protocol/http/src/http_half.cpp
+++ b/plugin/protocol/http/src/http_half.cpp
@@ -308,8 +308,15 @@ static int __parser_callback_on_headers_complete(http_parser * parser)
/* Does not contain a content-length, passthrough the whole TCP connection */
if (unlikely(__str_content_length == NULL))
{
- hf_private->is_passthrough = true;
- return -1;
+ const struct http_field_name __transfer_encoding_field_name = {TFE_HTTP_TRANSFER_ENCODING, NULL};
+ char *__str_transfer_encoding = (char *)tfe_http_field_read(hf_public, &__transfer_encoding_field_name);
+ if (!(__str_transfer_encoding && strncasecmp(__str_transfer_encoding, "chunked", strlen("chunked")) == 0))
+ {
+ const char * __str_stream = hf_private->session->hc_private->stream->str_stream_info;
+ TFE_LOG_ERROR(g_http_plugin->logger, "the content-length and transfer-encoding field not set, passthrough the whole tcp connection: %s. ", __str_stream);
+ hf_private->is_passthrough = true;
+ return -1;
+ }
}
}