]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
On the trunk:
authorStefan Eissing <icing@apache.org>
Fri, 14 Apr 2017 16:02:22 +0000 (16:02 +0000)
committerStefan Eissing <icing@apache.org>
Fri, 14 Apr 2017 16:02:22 +0000 (16:02 +0000)
mod_http2: client streams that lack the EOF flag get now forcefully
     closed with a RST_STREAM (NO_ERROR) when the request has been answered.

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1791388 13f79535-47bb-0310-9956-ffa450edef68

CHANGES
docs/log-message-tags/next-number
modules/http2/h2_mplx.c
modules/http2/h2_session.c

diff --git a/CHANGES b/CHANGES
index 12627a2fc2dad02f3cd871d6b2935c6e779a31f7..9df60bb0f8b57d09cb33eca976a5a296ac0a304d 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,10 @@
                                                          -*- coding: utf-8 -*-
 Changes with Apache 2.5.0
 
+  *) mod_http2: client streams that lack the EOF flag get now forcefully
+     closed with a RST_STREAM (NO_ERROR) when the request has been answered.
+     [Stefan Eissing]     
+
   *) mod_http2: only when 'HttpProtocolOptions Unsafe' is configured, will
      control characters in response headers or trailers be forwarded to the
      client. Otherwise, in the default configuration, a request will eiher 
index ac4e051f0ae2d5d437f47e5c3bc71c5673f81684..41ec1d1fcca8bf6a27265ed1713a38b54d5f2078 100644 (file)
@@ -1 +1 @@
-10024
+10027
index 357bf5eaadfde12571472ea20c8d77e3776b0af9..dbb74afd6bf4318905b620f4d0a124293b14b556 100644 (file)
@@ -258,7 +258,17 @@ static int input_consumed_signal(h2_mplx *m, h2_stream *stream)
 
 static int report_consumption_iter(void *ctx, void *val)
 {
-    input_consumed_signal(ctx, val);
+    h2_stream *stream = val;
+    h2_mplx *m = ctx;
+    
+    input_consumed_signal(m, stream);
+    if (stream->state == H2_SS_CLOSED_L
+        && (!stream->task || stream->task->worker_done)) {
+        ap_log_cerror(APLOG_MARK, APLOG_DEBUG, 0, m->c, 
+                      H2_STRM_LOG(APLOGNO(10026), stream, "remote close missing")); 
+        nghttp2_submit_rst_stream(stream->session->ngh2, NGHTTP2_FLAG_NONE, 
+                                  stream->id, NGHTTP2_NO_ERROR);
+    }
     return 1;
 }
 
index 185580bf250120b5e1851fa0889a5a280e521808..adece255ee5c5f217ceb49e71fbe019d30440b9a 100644 (file)
@@ -1294,7 +1294,7 @@ static apr_status_t on_stream_headers(h2_session *session, h2_stream *stream,
         }
         else {
             ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c,
-                          H2_STRM_LOG(APLOGNO(), stream, "invalid trailers"));
+                          H2_STRM_LOG(APLOGNO(10024), stream, "invalid trailers"));
             h2_stream_rst(stream, NGHTTP2_PROTOCOL_ERROR);
         }
         goto leave;
@@ -1384,7 +1384,7 @@ static apr_status_t on_stream_headers(h2_session *session, h2_stream *stream,
         }
         else {
             ap_log_cerror(APLOG_MARK, APLOG_DEBUG, status, session->c,
-                          H2_STRM_LOG(APLOGNO(), stream, "invalid response"));
+                          H2_STRM_LOG(APLOGNO(10025), stream, "invalid response"));
             h2_stream_rst(stream, NGHTTP2_PROTOCOL_ERROR);
         }
     }