diff options
Diffstat (limited to 'meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd')
2 files changed, 49 insertions, 81 deletions
diff --git a/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/Check-response-existence-on-upgrade.patch b/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/Check-response-existence-on-upgrade.patch new file mode 100644 index 000000000..de7ff30c4 --- /dev/null +++ b/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/Check-response-existence-on-upgrade.patch @@ -0,0 +1,49 @@ +From: jose.bollo@iot.bzh +Date: Thu, 4 May 2017 21:47:38 +0200 +Subject: [PATCH] Check response existence on upgrade +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When a connection upgrade is requested and when the +request sent an error reply, the response is most of +the time already sent when the test on +connection->response->upgrade_handler is made, leading +to dereferencing NULL. + +Two possibilities exist: + + NULL == connection->response || NULL == connection->response->upgrade_handler + +or + + NULL != connection->response && NULL == connection->response->upgrade_handler + +The first is prefered because it is probably safer to close the connection +in that case. + +Upstream-Status: Accepted [https://gnunet.org/git/libmicrohttpd.git/commit/?id=b4216c60fdb5b48f6cfec416301fc63a1167e6cd] + +Change-Id: Ie6e7fc165f7fe3635ade0952bb34a0b937d38716 +Signed-off-by: José Bollo <jobol@nonadev.net> +Signed-off-by: José Bollo <jose.bollo@iot.bzh> +--- + src/microhttpd/connection.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/microhttpd/connection.c b/src/microhttpd/connection.c +index 4753d6e..91a4492 100644 +--- a/src/microhttpd/connection.c ++++ b/src/microhttpd/connection.c +@@ -882,7 +882,7 @@ keepalive_possible (struct MHD_Connection *connection) + #ifdef UPGRADE_SUPPORT + if ( (MHD_str_equal_caseless_ (end, + "upgrade")) && +- (NULL == connection->response->upgrade_handler) ) ++ (NULL == connection->response || NULL == connection->response->upgrade_handler) ) + return MHD_NO; + #endif /* UPGRADE_SUPPORT */ + +-- +2.9.3 + diff --git a/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/allows-upgrade.patch b/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/allows-upgrade.patch deleted file mode 100644 index 19601a537..000000000 --- a/meta-app-framework/recipes-support/libmicrohttpd/libmicrohttpd/allows-upgrade.patch +++ /dev/null @@ -1,81 +0,0 @@ -diff -Naur a/src/microhttpd/connection.c b/src/microhttpd/connection.c ---- a/src/microhttpd/connection.c 2016-04-08 21:02:26.000000000 +0200 -+++ b/src/microhttpd/connection.c 2016-08-29 22:41:53.790560238 +0200 -@@ -708,6 +708,8 @@ - * "keep-alive", we proceed to use the default for the respective HTTP - * version (which is conservative for HTTP 1.0, but might be a bit - * optimistic for HTTP 1.1). -+ * In the case of Upgrade, the header Connection should not be set -+ * to keep-alive. - * - * @param connection the connection to check for keepalive - * @return #MHD_YES if (based on the request), a keepalive is -@@ -750,6 +752,59 @@ - - - /** -+ * Should we try to keep the given connection alive? We can use the -+ * TCP stream for a second request if the connection is HTTP 1.1 and -+ * the "Connection" header either does not exist or is not set to -+ * "close", or if the connection is HTTP 1.0 and the "Connection" -+ * header is explicitly set to "keep-alive". If no HTTP version is -+ * specified (or if it is not 1.0 or 1.1), we definitively close the -+ * connection. If the "Connection" header is not exactly "close" or -+ * "keep-alive", we proceed to use the default for the respective HTTP -+ * version (which is conservative for HTTP 1.0, but might be a bit -+ * optimistic for HTTP 1.1). -+ * In the case of Upgrade, the connection should be kept alive even if -+ * the header Connection is not keep-alive. -+ * -+ * @param connection the connection to check for keepalive -+ * @return #MHD_YES if (based on the request), a keepalive is -+ * legal -+ */ -+static int -+should_keepalive (struct MHD_Connection *connection) -+{ -+ const char *end; -+ -+ if (NULL == connection->version) -+ return MHD_NO; -+ 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; -+ return MHD_YES; -+ } -+ if (MHD_str_equal_caseless_(connection->version, -+ MHD_HTTP_VERSION_1_0)) -+ { -+ if (NULL == end) -+ return MHD_NO; -+ if (MHD_str_equal_caseless_(end, "Keep-Alive")) -+ return MHD_YES; -+ return MHD_NO; -+ } -+ return MHD_NO; -+} -+ -+ -+/** - * Produce HTTP "Date:" header. - * - * @param date where to write the header, with -@@ -2795,7 +2850,7 @@ - } - if (((MHD_YES == connection->read_closed) && - (0 == connection->read_buffer_offset)) || -- (MHD_NO == keepalive_possible (connection))) -+ (MHD_NO == should_keepalive (connection))) - { - /* have to close for some reason */ - MHD_connection_close_ (connection, |