From 40644c06c8977a175f8a62a6ac337482745ba5f9 Mon Sep 17 00:00:00 2001 From: thc202 Date: Tue, 18 Nov 2025 14:54:09 +0000 Subject: [PATCH] Check for log misconfigurations Check also for printed log misconfiguration issues when checking for ZAP errors. Signed-off-by: thc202 --- .github/workflows/conf/af-check-errors.yml | 45 ++++++++++++++++++---- zap/src/main/java/org/zaproxy/zap/ZAP.java | 3 +- 2 files changed, 40 insertions(+), 8 deletions(-) diff --git a/.github/workflows/conf/af-check-errors.yml b/.github/workflows/conf/af-check-errors.yml index 3b6c910ac39..6dbabc2a4d1 100644 --- a/.github/workflows/conf/af-check-errors.yml +++ b/.github/workflows/conf/af-check-errors.yml @@ -5,6 +5,39 @@ env: urls: - "http://localhost:9091/auth/simple-json/" jobs: + - type: script + parameters: + action: "add" + type: "standalone" + engine: "ECMAScript : Graal.js" + name: "error-test-setup" + inline: | + const ArrayList = Java.type("java.util.ArrayList") + const Collections = Java.type("java.util.Collections") + const DelegatorPrintStream = Java.extend(Java.type("org.zaproxy.zap.ZAP$DelegatorPrintStream")) + const ScriptVars = Java.type("org.zaproxy.zap.extension.script.ScriptVars") + const System = Java.type("java.lang.System") + + const errors = Collections.synchronizedList(new ArrayList()) + ScriptVars.setGlobalCustomVar("errors", errors) + + const previousSysErr = System.err + const ps = new DelegatorPrintStream(previousSysErr) { + println: function(x) { + previousSysErr.println(x) + + // Strings are split as scripts are shown in the log file + if (x && (x.startsWith("SLF" + "4J") || x.startsWith("log" + "4j:"))) { + errors.add(x) + } + } + } + System.setErr(ps) + - type: script + parameters: + action: "run" + type: "standalone" + name: "error-test-setup" - type: script parameters: action: "add" @@ -12,26 +45,24 @@ jobs: engine: "ECMAScript : Graal.js" name: "error-test" inline: | + const Constant = Java.type("org.parosproxy.paros.Constant"); var extAF = control.getExtensionLoader().getExtension("ExtensionAutomation"); var plans = extAF.getRunningPlans(); var File = Java.type("java.io.File"); var Scanner = Java.type("java.util.Scanner"); - var zaplog = new File("/home/zap/.ZAP/zap.log") - if (!zaplog.exists()) { - // Not stable so check for nightly/weekly - zaplog = new File("/home/zap/.ZAP_D/zap.log") - } + const ScriptVars = Java.type("org.zaproxy.zap.extension.script.ScriptVars") + const zaplog = new File(Constant.getZapHome(), "zap.log") + const errors = ScriptVars.getGlobalCustomVar("errors") if (!zaplog.exists()) { plans.get(0).getProgress().error("Failed to read zap.log file"); } else { var scan = new Scanner(zaplog); - var errors = []; while(scan.hasNext()){ var line = scan.nextLine().toString(); // String is split as scripts are shown in the log file if (line.contains("ERR" + "OR") && ! line.contains("Adding message bundle with duplicate prefix: dev")){ // Fixed in main - errors.push(line); + errors.add(line); } } errors.forEach((item, index) => { diff --git a/zap/src/main/java/org/zaproxy/zap/ZAP.java b/zap/src/main/java/org/zaproxy/zap/ZAP.java index 97ed17cea10..d45acf796de 100644 --- a/zap/src/main/java/org/zaproxy/zap/ZAP.java +++ b/zap/src/main/java/org/zaproxy/zap/ZAP.java @@ -218,7 +218,8 @@ private boolean isLoggerConfigured() { } } - private static class DelegatorPrintStream extends PrintStream { + /** Not part of the public API. */ + public static class DelegatorPrintStream extends PrintStream { private final PrintStream delegatee;