Blame SOURCES/mod_http2-1.15.7-CVE-2020-11993.patch

8b11ee
diff --git a/mod_http2/h2_mplx.c b/mod_http2/h2_mplx.c
8b11ee
index c3d590d..33ea45e 100644
8b11ee
--- a/mod_http2/h2_mplx.c
8b11ee
+++ b/mod_http2/h2_mplx.c
8b11ee
@@ -56,7 +56,7 @@ typedef struct {
8b11ee
     apr_size_t count;
8b11ee
 } stream_iter_ctx;
8b11ee
 
8b11ee
-static apr_status_t mplx_be_happy(h2_mplx *m);
8b11ee
+static apr_status_t mplx_be_happy(h2_mplx *m, h2_task *task);
8b11ee
 static apr_status_t mplx_be_annoyed(h2_mplx *m);
8b11ee
 
8b11ee
 apr_status_t h2_mplx_child_init(apr_pool_t *pool, server_rec *s)
8b11ee
@@ -526,10 +526,10 @@ static apr_status_t out_open(h2_mplx *m, int stream_id, h2_bucket_beam *beam)
8b11ee
     stream->output = beam;
8b11ee
     
8b11ee
     if (APLOGctrace2(m->c)) {
8b11ee
-        h2_beam_log(beam, m->c, APLOG_TRACE2, "out_open");
8b11ee
+        h2_beam_log(beam, stream->task->c, APLOG_TRACE2, "out_open");
8b11ee
     }
8b11ee
     else {
8b11ee
-        ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c,
8b11ee
+        ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, stream->task->c,
8b11ee
                       "h2_mplx(%s): out open", stream->task->id);
8b11ee
     }
8b11ee
     
8b11ee
@@ -579,10 +579,10 @@ static apr_status_t out_close(h2_mplx *m, h2_task *task)
8b11ee
         return APR_ECONNABORTED;
8b11ee
     }
8b11ee
 
8b11ee
-    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, status, m->c,
8b11ee
+    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, status, task->c,
8b11ee
                   "h2_mplx(%s): close", task->id);
8b11ee
     status = h2_beam_close(task->output.beam);
8b11ee
-    h2_beam_log(task->output.beam, m->c, APLOG_TRACE2, "out_close");
8b11ee
+    h2_beam_log(task->output.beam, task->c, APLOG_TRACE2, "out_close");
8b11ee
     output_consumed_signal(m, task);
8b11ee
     check_data_for(m, stream, 1);
8b11ee
     return status;
8b11ee
@@ -782,18 +782,18 @@ static void task_done(h2_mplx *m, h2_task *task)
8b11ee
 {
8b11ee
     h2_stream *stream;
8b11ee
     
8b11ee
-    ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c,
8b11ee
+    ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, task->c,
8b11ee
                   "h2_mplx(%ld): task(%s) done", m->id, task->id);
8b11ee
     out_close(m, task);
8b11ee
     
8b11ee
     task->worker_done = 1;
8b11ee
     task->done_at = apr_time_now();
8b11ee
-    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
8b11ee
+    ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, task->c,
8b11ee
                   "h2_mplx(%s): request done, %f ms elapsed", task->id, 
8b11ee
                   (task->done_at - task->started_at) / 1000.0);
8b11ee
     
8b11ee
     if (task->c && !task->c->aborted && task->started_at > m->last_mood_change) {
8b11ee
-        mplx_be_happy(m);
8b11ee
+        mplx_be_happy(m, task);
8b11ee
     }
8b11ee
     
8b11ee
     ap_assert(task->done_done == 0);
8b11ee
@@ -805,13 +805,13 @@ static void task_done(h2_mplx *m, h2_task *task)
8b11ee
             /* reset and schedule again */
8b11ee
             h2_task_redo(task);
8b11ee
             h2_iq_add(m->q, stream->id, NULL, NULL);
8b11ee
-            ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, m->c,
8b11ee
+            ap_log_cerror(APLOG_MARK, APLOG_INFO, 0, task->c,
8b11ee
                           H2_STRM_MSG(stream, "redo, added to q")); 
8b11ee
         }
8b11ee
         else {
8b11ee
             /* stream not cleaned up, stay around */
8b11ee
             task->done_done = 1;
8b11ee
-            ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
8b11ee
+            ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, task->c,
8b11ee
                           H2_STRM_MSG(stream, "task_done, stream open")); 
8b11ee
             if (stream->input) {
8b11ee
                 h2_beam_leave(stream->input);
8b11ee
@@ -824,7 +824,7 @@ static void task_done(h2_mplx *m, h2_task *task)
8b11ee
     else if ((stream = h2_ihash_get(m->shold, task->stream_id)) != NULL) {
8b11ee
         /* stream is done, was just waiting for this. */
8b11ee
         task->done_done = 1;
8b11ee
-        ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, m->c,
8b11ee
+        ap_log_cerror(APLOG_MARK, APLOG_TRACE2, 0, task->c,
8b11ee
                       H2_STRM_MSG(stream, "task_done, in hold"));
8b11ee
         if (stream->input) {
8b11ee
             h2_beam_leave(stream->input);
8b11ee
@@ -832,12 +832,12 @@ static void task_done(h2_mplx *m, h2_task *task)
8b11ee
         stream_joined(m, stream);
8b11ee
     }
8b11ee
     else if ((stream = h2_ihash_get(m->spurge, task->stream_id)) != NULL) {
8b11ee
-        ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, m->c,   
8b11ee
+        ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, task->c,   
8b11ee
                       H2_STRM_LOG(APLOGNO(03517), stream, "already in spurge"));
8b11ee
         ap_assert("stream should not be in spurge" == NULL);
8b11ee
     }
8b11ee
     else {
8b11ee
-        ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, m->c, APLOGNO(03518)
8b11ee
+        ap_log_cerror(APLOG_MARK, APLOG_WARNING, 0, task->c, APLOGNO(03518)
8b11ee
                       "h2_mplx(%s): task_done, stream not found", 
8b11ee
                       task->id);
8b11ee
         ap_assert("stream should still be available" == NULL);
8b11ee
@@ -963,7 +963,7 @@ static apr_status_t unschedule_slow_tasks(h2_mplx *m)
8b11ee
     return rv;
8b11ee
 }
8b11ee
 
8b11ee
-static apr_status_t mplx_be_happy(h2_mplx *m)
8b11ee
+static apr_status_t mplx_be_happy(h2_mplx *m, h2_task *task)
8b11ee
 {
8b11ee
     apr_time_t now;            
8b11ee
 
8b11ee
@@ -975,7 +975,7 @@ static apr_status_t mplx_be_happy(h2_mplx *m)
8b11ee
         m->limit_active = H2MIN(m->limit_active * 2, m->max_active);
8b11ee
         m->last_mood_change = now;
8b11ee
         m->irritations_since = 0;
8b11ee
-        ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, m->c,
8b11ee
+        ap_log_cerror(APLOG_MARK, APLOG_TRACE1, 0, task->c,
8b11ee
                       "h2_mplx(%ld): mood update, increasing worker limit to %d",
8b11ee
                       m->id, m->limit_active);
8b11ee
     }