From 1a32ee3cb230e74c5474ee14b258b86bfc908153 Mon Sep 17 00:00:00 2001 From: MariaLapovska Date: Mon, 16 Feb 2026 14:28:52 -0600 Subject: [PATCH] Fix IndexOutOfBoundsException when calling PostRequest.getUpstreamHeaders --- .../apisix/plugin/runner/handler/RpcCallHandler.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java index 06095ed..50eca38 100644 --- a/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java +++ b/runner-core/src/main/java/org/apache/apisix/plugin/runner/handler/RpcCallHandler.java @@ -180,6 +180,10 @@ private void handleHttpRespCall(ChannelHandlerContext ctx, PostRequest request) PluginFilterChain chain = conf.getChain(); + // here we pre-read parameters in the resp to + // prevent confusion over the read/write index of the resp. + preReadPostReq(); + if (Objects.isNull(chain) || 0 == chain.getFilters().size()) { ChannelFuture future = ctx.writeAndFlush(postResp); future.addListeners(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); @@ -328,6 +332,11 @@ private void preReadReq() { currReq.getSourceIP(); } + private void preReadPostReq() { + postReq.getUpstreamHeaders(); + postReq.getUpstreamStatusCode(); + } + private void errorHandle(ChannelHandlerContext ctx, int code) { A6ErrResponse errResponse = new A6ErrResponse(code); ctx.writeAndFlush(errResponse);