You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by cl...@apache.org on 2022/07/28 17:32:49 UTC

[activemq-artemis] branch new-logging updated: Adding safeguard against {} on LogProcessor

This is an automated email from the ASF dual-hosted git repository.

clebertsuconic pushed a commit to branch new-logging
in repository https://gitbox.apache.org/repos/asf/activemq-artemis.git


The following commit(s) were added to refs/heads/new-logging by this push:
     new 815eefb624 Adding safeguard against {} on LogProcessor
815eefb624 is described below

commit 815eefb62415d6ece768021fca1eb50a95326abf
Author: Clebert Suconic <cl...@apache.org>
AuthorDate: Thu Jul 28 13:32:24 2022 -0400

    Adding safeguard against {} on LogProcessor
---
 .../artemis/logprocessor/LogProcessor.java         | 30 ++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/artemis-log-processor/src/main/java/org/apache/activemq/artemis/logprocessor/LogProcessor.java b/artemis-log-processor/src/main/java/org/apache/activemq/artemis/logprocessor/LogProcessor.java
index f7e2ed5279..15fd37e187 100644
--- a/artemis-log-processor/src/main/java/org/apache/activemq/artemis/logprocessor/LogProcessor.java
+++ b/artemis-log-processor/src/main/java/org/apache/activemq/artemis/logprocessor/LogProcessor.java
@@ -37,6 +37,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
+import java.util.function.Consumer;
 
 import org.apache.activemq.artemis.logprocessor.annotation.LogBundle;
 import org.apache.activemq.artemis.logprocessor.annotation.GetLogger;
@@ -71,6 +72,23 @@ public class LogProcessor extends AbstractProcessor {
    }
 
 
+   private static void tupples(String arg, char open, char close, Consumer<String> stringConsumer) {
+      int openAt = -1;
+      for (int i = 0; i < arg.length(); i++) {
+         char charAt = arg.charAt(i);
+
+         if (charAt == open) {
+            openAt = i;
+         } else if (charAt == close) {
+            if (openAt >= 0) {
+               stringConsumer.accept(arg.substring(openAt + 1, i));
+            }
+            openAt = -1;
+         }
+
+      }
+   }
+
 
    @Override
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) {
@@ -192,6 +210,14 @@ public class LogProcessor extends AbstractProcessor {
       return true;
    }
 
+   private void verifyLogArguments(String logMessage, Object holder) {
+      tupples(logMessage, '{', '}', (tupple) -> {
+         if (!tupple.equals("")) {
+            throw new IllegalArgumentException("Invalid log argument {" + tupple + "} on message \'" + logMessage + "\' as part of " + holder + "\nreplace it by {}");
+         }
+      });
+   }
+
    private void generateMessage(LogBundle bundleAnnotation,
                                 PrintWriter writerOutput,
                                 ExecutableElement executableMember,
@@ -204,6 +230,8 @@ public class LogProcessor extends AbstractProcessor {
          throw new IllegalStateException("message " + messageAnnotation.id() + " with definition = " + messageAnnotation.value() + " was previously defined as " + previousMessage);
       }
 
+      verifyLogArguments(messageAnnotation.value(), executableMember);
+
       processedMessages.put(messageAnnotation.id(), messageAnnotation.value());
 
       // This is really a debug output
@@ -346,6 +374,8 @@ public class LogProcessor extends AbstractProcessor {
          throw new IllegalStateException("message " + messageAnnotation.id() + " with definition = " + messageAnnotation.value() + " was previously defined as " + previousMessage);
       }
 
+      verifyLogArguments(messageAnnotation.value(), executableMember);
+
       processedMessages.put(messageAnnotation.id(), messageAnnotation.value());
 
       // This is really a debug output