This is an automated email from the ASF dual-hosted git repository. heneveld pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/brooklyn-server.git
commit a7ccf6a2114a191ef59545869fa8fc15c0ba2f41 Author: Alex Heneveld <[email protected]> AuthorDate: Mon Jan 20 20:44:13 2025 +0000 Sanitize stdout and stderr from scripts\ Useful where they are used to collect env vars. --- .../core/task/system/internal/ExecWithLoggingHelpers.java | 2 ++ .../org/apache/brooklyn/util/stream/LoggingOutputStream.java | 12 ++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/ExecWithLoggingHelpers.java b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/ExecWithLoggingHelpers.java index 6185c3a0ef..b7fdc141a7 100644 --- a/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/ExecWithLoggingHelpers.java +++ b/core/src/main/java/org/apache/brooklyn/util/core/task/system/internal/ExecWithLoggingHelpers.java @@ -133,6 +133,7 @@ public abstract class ExecWithLoggingHelpers { OutputStream outO = LoggingOutputStream.builder() .outputStream(execFlags.get(STDOUT)) .logger(commandLogger) + .sanitizer(Sanitizer::sanitizeMultilineString) .logPrefix(stdoutLogPrefix) .build(); @@ -144,6 +145,7 @@ public abstract class ExecWithLoggingHelpers { OutputStream outE = LoggingOutputStream.builder() .outputStream(execFlags.get(STDERR)) .logger(commandLogger) + .sanitizer(Sanitizer::sanitizeMultilineString) .logPrefix(stderrLogPrefix) .build(); execFlags.put(STDERR, outE); diff --git a/utils/common/src/main/java/org/apache/brooklyn/util/stream/LoggingOutputStream.java b/utils/common/src/main/java/org/apache/brooklyn/util/stream/LoggingOutputStream.java index 7c1322cea6..c3d3c779d1 100644 --- a/utils/common/src/main/java/org/apache/brooklyn/util/stream/LoggingOutputStream.java +++ b/utils/common/src/main/java/org/apache/brooklyn/util/stream/LoggingOutputStream.java @@ -23,6 +23,7 @@ import java.io.IOException; import java.io.OutputStream; import java.nio.charset.StandardCharsets; import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.Function; import org.apache.http.util.ByteArrayBuffer; import org.slf4j.Logger; @@ -52,6 +53,7 @@ public class LoggingOutputStream extends FilterOutputStream { OutputStream out; Logger log; String logPrefix; + Function<String,String> sanitizer; public Builder outputStream(OutputStream val) { this.out = val; @@ -65,6 +67,10 @@ public class LoggingOutputStream extends FilterOutputStream { this.logPrefix = val; return this; } + public Builder sanitizer(Function<String,String> val) { + this.sanitizer = val; + return this; + } public LoggingOutputStream build() { return new LoggingOutputStream(this); } @@ -73,7 +79,8 @@ public class LoggingOutputStream extends FilterOutputStream { protected final Logger log; protected final String logPrefix; private final AtomicBoolean running = new AtomicBoolean(true); - + protected final Function<String,String> sanitizer; + // Uses byte array, rather than StringBuilder, to handle Unicode chars longer than one byte private ByteArrayBuffer lineSoFar = new ByteArrayBuffer(16); @@ -81,6 +88,7 @@ public class LoggingOutputStream extends FilterOutputStream { super(builder.out != null ? builder.out : NOOP_OUTPUT_STREAM); log = builder.log; logPrefix = (builder.logPrefix != null) ? builder.logPrefix : ""; + sanitizer = (builder.sanitizer != null) ? builder.sanitizer : s->s; } @Override @@ -151,7 +159,7 @@ public class LoggingOutputStream extends FilterOutputStream { while (line.length()>0 && (line.charAt(0)=='\n' || line.charAt(0)=='\r')) line = line.substring(1); if (!line.isEmpty()) { - if (log!=null && log.isDebugEnabled()) log.debug(logPrefix+line); + if (log!=null && log.isDebugEnabled()) log.debug(logPrefix+sanitizer.apply(line)); } } }
