[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [libmicrohttpd] 06/06: Fixed: check all request "Connection
From: |
gnunet |
Subject: |
[GNUnet-SVN] [libmicrohttpd] 06/06: Fixed: check all request "Connection" headers for "Close" and "Upgrade" tokens instead of using only first "Connection" header with full string match. |
Date: |
Tue, 09 May 2017 21:34:12 +0200 |
This is an automated email from the git hooks/post-receive script.
karlson2k pushed a commit to branch master
in repository libmicrohttpd.
commit e0825eab1376a4bd8177172bab9773d2bf3b0d2c
Author: Evgeny Grin (Karlson2k) <address@hidden>
AuthorDate: Tue May 9 21:38:11 2017 +0300
Fixed: check all request "Connection" headers for "Close" and "Upgrade"
tokens instead of
using only first "Connection" header with full string match.
---
ChangeLog | 5 ++++
src/microhttpd/connection.c | 64 ++++++++++++++++++++-------------------------
2 files changed, 34 insertions(+), 35 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 9a1f3dae..ed19ecc9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue May 9 21:01:00 MSK 2017
+ Fixed: check all "Connection" headers of request for "Close" and
"Upgrade"
+ tokens instead of using only first "Connection" header with full string
+ match. -EG
+
Tue May 9 12:28:00 MSK 2017
Revert: continue match footers in MHD_get_response_header() for backward
compatibility. -EG
diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c
index 6c7d5226..e3bf9e29 100644
--- a/src/microhttpd/connection.c
+++ b/src/microhttpd/connection.c
@@ -912,8 +912,6 @@ try_ready_chunked_body (struct MHD_Connection *connection)
static int
keepalive_possible (struct MHD_Connection *connection)
{
- const char *end;
-
if (MHD_CONN_MUST_CLOSE == connection->keepalive)
return MHD_NO;
if (NULL == connection->version)
@@ -921,37 +919,37 @@ keepalive_possible (struct MHD_Connection *connection)
if ( (NULL != connection->response) &&
(0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY) ) )
return MHD_NO;
- end = MHD_lookup_connection_value (connection,
- MHD_HEADER_KIND,
- MHD_HTTP_HEADER_CONNECTION);
+
if (MHD_str_equal_caseless_(connection->version,
MHD_HTTP_VERSION_1_1))
- {
- if (NULL == end)
- return MHD_YES;
- if (MHD_str_equal_caseless_ (end,
- "close"))
- return MHD_NO;
+ {
+ if (MHD_lookup_header_s_token_ci (connection,
+ MHD_HTTP_HEADER_CONNECTION,
+ "upgrade"))
+ {
#ifdef UPGRADE_SUPPORT
- if ( (MHD_str_equal_caseless_ (end,
- "upgrade")) &&
- ( (NULL == connection->response) ||
- (NULL == connection->response->upgrade_handler) ) )
- return MHD_NO;
+ if ( (NULL == connection->response) ||
+ (NULL == connection->response->upgrade_handler) )
#endif /* UPGRADE_SUPPORT */
+ return MHD_NO;
+ }
+ if (MHD_lookup_header_s_token_ci (connection,
+ MHD_HTTP_HEADER_CONNECTION,
+ "close"))
+ return MHD_NO;
- return MHD_YES;
- }
+ return MHD_YES;
+ }
if (MHD_str_equal_caseless_(connection->version,
MHD_HTTP_VERSION_1_0))
- {
- if (NULL == end)
+ {
+ if (MHD_lookup_header_s_token_ci (connection,
+ MHD_HTTP_HEADER_CONNECTION,
+ "Keep-Alive"))
+ return MHD_YES;
+
return MHD_NO;
- if (MHD_str_equal_caseless_(end,
- "Keep-Alive"))
- return MHD_YES;
- return MHD_NO;
- }
+ }
return MHD_NO;
}
@@ -1069,7 +1067,7 @@ build_header_response (struct MHD_Connection *connection)
enum MHD_ValueKind kind;
const char *reason_phrase;
uint32_t rc;
- const char *client_requested_close;
+ bool client_requested_close;
bool response_has_close;
bool response_has_keepalive;
const char *have_encoding;
@@ -1144,13 +1142,9 @@ build_header_response (struct MHD_Connection *connection)
response_has_keepalive = MHD_check_response_header_s_token_ci
(connection->response,
MHD_HTTP_HEADER_CONNECTION,
"Keep-Alive");
- client_requested_close = MHD_lookup_connection_value (connection,
- MHD_HEADER_KIND,
-
MHD_HTTP_HEADER_CONNECTION);
- if ( (NULL != client_requested_close) &&
- (! MHD_str_equal_caseless_ (client_requested_close,
- "close")) )
- client_requested_close = NULL;
+ client_requested_close = MHD_lookup_header_s_token_ci (connection,
+
MHD_HTTP_HEADER_CONNECTION,
+ "close");
if (0 != (connection->response->flags & MHD_RF_HTTP_VERSION_1_0_ONLY))
connection->keepalive = MHD_CONN_MUST_CLOSE;
@@ -1160,7 +1154,7 @@ build_header_response (struct MHD_Connection *connection)
if ( (MHD_SIZE_UNKNOWN == connection->response->total_size) &&
(! response_has_close) &&
- (NULL == client_requested_close) )
+ (! client_requested_close) )
{
/* size is unknown, and close was not explicitly requested;
need to either to HTTP 1.1 chunked encoding or
@@ -1199,7 +1193,7 @@ build_header_response (struct MHD_Connection *connection)
}
/* check for other reasons to add 'close' header */
- if ( ( (NULL != client_requested_close) ||
+ if ( ( (client_requested_close) ||
(connection->read_closed) ||
(MHD_CONN_MUST_CLOSE == connection->keepalive)) &&
(! response_has_close) &&
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [libmicrohttpd] branch master updated (4809ee65 -> e0825eab), gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 01/06: Fixed missing include, gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 03/06: Added internal function for finding token in response headers MHD_check_response_header_token_ci(), gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 05/06: Added internal function for finding token in request headers, gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 02/06: Added function for detection of token inside comma-separated string, added tests, gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 04/06: Detect several tokens in single header line of response., gnunet, 2017/05/09
- [GNUnet-SVN] [libmicrohttpd] 06/06: Fixed: check all request "Connection" headers for "Close" and "Upgrade" tokens instead of using only first "Connection" header with full string match.,
gnunet <=