From 75b40281ac5aa04f5cfff35dfb6c8ce227660298 Mon Sep 17 00:00:00 2001 From: Vyacheslav Chigrin Date: Wed, 7 May 2025 15:25:41 +0300 Subject: [PATCH] Fix sengind local replies after VM failure in decodeHeaders callback. --- src/context.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/context.cc b/src/context.cc index 5353a52a..2ff6e000 100644 --- a/src/context.cc +++ b/src/context.cc @@ -364,7 +364,11 @@ FilterMetadataStatus ContextBase::onRequestMetadata(uint32_t elements) { } FilterHeadersStatus ContextBase::onResponseHeaders(uint32_t headers, bool end_of_stream) { - CHECK_FAIL_HTTP(FilterHeadersStatus::Continue, FilterHeadersStatus::StopAllIterationAndWatermark); + // This callback may be called when WASM encountered fatal failure on earlier + // stages of request processing. In that case we are may be in process of + // sending local reply due to failStream() call. + // We must not block it to prevent request hang. + CHECK_FAIL_HTTP(FilterHeadersStatus::Continue, FilterHeadersStatus::Continue); if (!wasm_->on_response_headers_abi_01_ && !wasm_->on_response_headers_abi_02_) { return FilterHeadersStatus::Continue; }