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

pkarwasz pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 33fff89edc Fix warning when last argument is null (#4014)
33fff89edc is described below

commit 33fff89edc688ae64e44424abef122c13cc1f5be
Author: lrozenblyum <[email protected]>
AuthorDate: Mon Dec 29 14:11:59 2025 +0200

    Fix warning when last argument is null (#4014)
---
 .../logging/log4j/message/ParameterFormatterTest.java      | 13 +++++++++++++
 .../apache/logging/log4j/message/ParameterFormatter.java   |  8 +++++++-
 .../.2.x.x/3975_prevent_warning_for_last_null_argument.xml | 14 ++++++++++++++
 3 files changed, 34 insertions(+), 1 deletion(-)

diff --git 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
index e4988f4141..37c4a2b7bb 100644
--- 
a/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
+++ 
b/log4j-api-test/src/test/java/org/apache/logging/log4j/message/ParameterFormatterTest.java
@@ -98,6 +98,19 @@ class ParameterFormatterTest {
                         placeholderCount, argCount, pattern);
     }
 
+    @Test
+    void format_should_not_warn_on_insufficient_args() {
+        final String expectedMessage = "pan a";
+        final String pattern = "pan {}";
+        final String[] args = new String[] {"a", null};
+        final int argCount = args.length;
+
+        String actualMessage = ParameterFormatter.format(pattern, args, 
argCount);
+        assertThat(actualMessage).isEqualTo(expectedMessage);
+        final List<StatusData> statusDataList = 
statusListener.getStatusData().collect(Collectors.toList());
+        assertThat(statusDataList).isEmpty();
+    }
+
     @ParameterizedTest
     @MethodSource("messageFormattingTestCases")
     void format_should_work(
diff --git 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
index 551f02c7f7..df2d44d83e 100644
--- 
a/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
+++ 
b/log4j-api/src/main/java/org/apache/logging/log4j/message/ParameterFormatter.java
@@ -247,7 +247,7 @@ final class ParameterFormatter {
         // #2380: check if the count of placeholder is not equal to the count 
of arguments
         if (analysis.placeholderCount != argCount) {
             final int noThrowableArgCount =
-                    argCount < 1 ? 0 : argCount - ((args[argCount - 1] 
instanceof Throwable) ? 1 : 0);
+                    argCount < 1 ? 0 : argCount - 
(isLastArgumentThrowable(args, argCount) ? 1 : 0);
             if (analysis.placeholderCount != noThrowableArgCount) {
                 STATUS_LOGGER.warn(
                         "found {} argument placeholders, but provided {} for 
pattern `{}`",
@@ -268,6 +268,12 @@ final class ParameterFormatter {
         }
     }
 
+    private static boolean isLastArgumentThrowable(final Object[] args, final 
int argCount) {
+        final Object lastArgument = args[argCount - 1];
+        // #3975: tolerate null in the last argument since it could have been 
Throwable parameter
+        return (lastArgument == null) || (lastArgument instanceof Throwable);
+    }
+
     private static void formatMessageContainingNoEscapes(
             final StringBuilder buffer,
             final String pattern,
diff --git 
a/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml 
b/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml
new file mode 100644
index 0000000000..9c96386fac
--- /dev/null
+++ b/src/changelog/.2.x.x/3975_prevent_warning_for_last_null_argument.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<entry xmlns="https://logging.apache.org/xml/ns";
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="
+           https://logging.apache.org/xml/ns
+           https://logging.apache.org/xml/ns/log4j-changelog-0.xsd";
+       type="changed">
+    <issue id="3975" 
link="https://github.com/apache/logging-log4j2/issues/3975"/>
+    <issue id="4014" 
link="https://github.com/apache/logging-log4j2/pull/4014"/>
+    <description format="asciidoc">
+      Prevent ParameterFormatter issuing a warning in case there is an extra 
null argument.
+      Needed to support cases with Throwable parameter that may be null.
+    </description>
+</entry>

Reply via email to