From 442adfa495eb84f0cf2bc27a727499e5f22c86c9 Mon Sep 17 00:00:00 2001 From: ali dandash Date: Thu, 27 Jul 2023 01:40:21 +0300 Subject: [PATCH] Fix infinite recursive loop causing application freeze In the 'getInputStream()' contains an infinite recursive loop when 'needRequestRestore' was true and the 'body' was not null. Fixes #22010 --- .../keycloak/adapters/servlet/FilterSessionStore.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/adapters/spi/jakarta-servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/FilterSessionStore.java b/adapters/spi/jakarta-servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/FilterSessionStore.java index aaa84a82a2e..2de0245eb91 100755 --- a/adapters/spi/jakarta-servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/FilterSessionStore.java +++ b/adapters/spi/jakarta-servlet-adapter-spi/src/main/java/org/keycloak/adapters/servlet/FilterSessionStore.java @@ -171,7 +171,6 @@ public class FilterSessionStore implements AdapterSessionStore { @Override public ServletInputStream getInputStream() throws IOException { - if (needRequestRestore && body != null) { final ByteArrayInputStream is = new ByteArrayInputStream(body); return new ServletInputStream() { @@ -179,14 +178,18 @@ public class FilterSessionStore implements AdapterSessionStore { public int read() throws IOException { return is.read(); } + @Override public boolean isFinished() { - return isFinished(); + return is.available() == 0; // Check if the underlying stream has data available. } + @Override public boolean isReady() { - return isReady(); + return true; // Return true to indicate that the data is always ready to be read. } + + @Override public void setReadListener(ReadListener readListener) { throw new UnsupportedOperationException(); }