diff --git a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java index 68d6770..0ab398f 100644 --- a/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java +++ b/graylog-plugin-function-base64inflate/src/main/java/org/graylog/plugins/custom/Base64InflateFunction.java @@ -27,11 +27,13 @@ import org.graylog.plugins.pipelineprocessor.ast.functions.FunctionDescriptor; import org.graylog.plugins.pipelineprocessor.ast.functions.ParameterDescriptor; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.InputStreamReader; import java.io.BufferedReader; import java.nio.charset.StandardCharsets; import java.util.Base64; -import java.util.zip.GZIPInputStream; +import java.util.zip.Inflater; +import java.util.zip.InflaterInputStream; import java.net.URLDecoder; import org.slf4j.Logger; @@ -68,22 +70,25 @@ public class Base64InflateFunction extends AbstractFunction { final String input = inputParam.required(args, context); try { LOG.debug("Received input for Base64Inflate: {}", input); - String cleanInput = URLDecoder.decode(input, StandardCharsets.UTF_8.name()); - byte[] decoded = Base64.getUrlDecoder().decode(cleanInput); - try (GZIPInputStream gis = new GZIPInputStream(new ByteArrayInputStream(decoded))) { - byte[] uncompressed = gis.readAllBytes(); - String result = new String(uncompressed, StandardCharsets.UTF_8); - LOG.debug("Decompressed result: {}", result); - return result; + String urlDecoded = URLDecoder.decode(input, StandardCharsets.UTF_8.name()); + byte[] base64Decoded = Base64.getDecoder().decode(urlDecoded); + + try (InflaterInputStream inflater = new InflaterInputStream( + new ByteArrayInputStream(base64Decoded), new Inflater(true)); + ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) { + + byte[] buffer = new byte[1024]; + int len; + while ((len = inflater.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); + } + + return outputStream.toString(StandardCharsets.UTF_8.name()); } } catch (Exception e) { LOG.error("Base64Inflate failed: {}", e.getMessage(), e); return null; } } - - - - } diff --git a/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class b/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class index 96a87d0..ed867d4 100644 Binary files a/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class and b/graylog-plugin-function-base64inflate/target/classes/org/graylog/plugins/custom/Base64InflateFunction.class differ diff --git a/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar b/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar index da57ff8..c2184dd 100644 Binary files a/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar and b/graylog-plugin-function-base64inflate/target/graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar differ diff --git a/graylog-plugin-function-base64inflate/target/original-graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar b/graylog-plugin-function-base64inflate/target/original-graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar index 475f2a1..c91d421 100644 Binary files a/graylog-plugin-function-base64inflate/target/original-graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar and b/graylog-plugin-function-base64inflate/target/original-graylog-plugin-function-base64inflate-1.0.0-SNAPSHOT.jar differ