From: Lukáš Ježek Date: Fri, 12 Mar 2021 12:36:37 +0000 (+0100) Subject: daemon/http: fix assertion fail when data frame is recieved X-Git-Tag: v5.3.1~11^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92f96292c86c7a5e6f636a3311bd55f9bca5ef3f;p=thirdparty%2Fknot-resolver.git daemon/http: fix assertion fail when data frame is recieved --- diff --git a/daemon/http.c b/daemon/http.c index b1ee725be..b04176350 100644 --- a/daemon/http.c +++ b/daemon/http.c @@ -536,13 +536,10 @@ static int data_chunk_recv_callback(nghttp2_session *h2, uint8_t flags, int32_t struct http_ctx *ctx = (struct http_ctx *)user_data; ssize_t remaining; ssize_t required; - assert(ctx->current_stream); - bool is_first = queue_len(ctx->streams) == 0 || queue_tail(ctx->streams) != ctx->current_stream->stream_id; + bool is_first; - if (ctx->current_stream->stream_id != stream_id) { - kr_log_verbose( - "[http] stream %d incomplete\n", - ctx->current_stream->stream_id); + if (ctx->current_stream == NULL || ctx->current_stream->stream_id != stream_id) { + kr_log_verbose("[http] incomplete stream\n"); if (!set_error_status(ctx, stream_id, 501, "incomplete stream")) return NGHTTP2_ERR_CALLBACK_FAILURE; return 0; @@ -550,6 +547,8 @@ static int data_chunk_recv_callback(nghttp2_session *h2, uint8_t flags, int32_t remaining = ctx->buf_size - ctx->submitted - ctx->buf_pos; required = len; + + is_first = queue_len(ctx->streams) == 0 || queue_tail(ctx->streams) != ctx->current_stream->stream_id; /* First data chunk of the new stream */ if (is_first) required += sizeof(uint16_t);