You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by el...@apache.org on 2026/08/20 20:45:27 UTC

(maven-filtering) branch master updated: Fix setEscapeString(null) to clear escape state (#373)

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

elharo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven-filtering.git


The following commit(s) were added to refs/heads/master by this push:
     new d39618d  Fix setEscapeString(null) to clear escape state (#373)
d39618d is described below

commit d39618d73e54d30601bfe97233dab4caf72581fa
Author: Elliotte Rusty Harold <el...@users.noreply.github.com>
AuthorDate: Thu Aug 20 16:45:22 2026 -0400

    Fix setEscapeString(null) to clear escape state (#373)
    
    setEscapeString(null) and setEscapeString("") were silently ignored,
    leaving the previous escape string and useEscape flag intact. A caller
    who sets escape string to non-null, then later sets it to null to
    disable escaping, would find escaping still active with the old string.
    
    Fix by clearing escapeString to null and useEscape to false when the
    input is null or empty, and always call calculateMarkLength().
    
    Also added tests verifying both null and empty string disable escaping.
    
    Closes #351
---
 .../filtering/AbstractFilterReaderLineEnding.java  |  6 ++--
 .../InterpolatorFilterReaderLineEndingTest.java    | 32 ++++++++++++++++++++++
 2 files changed, 36 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/filtering/AbstractFilterReaderLineEnding.java b/src/main/java/org/apache/maven/shared/filtering/AbstractFilterReaderLineEnding.java
index f47de4c..343eaf0 100644
--- a/src/main/java/org/apache/maven/shared/filtering/AbstractFilterReaderLineEnding.java
+++ b/src/main/java/org/apache/maven/shared/filtering/AbstractFilterReaderLineEnding.java
@@ -65,12 +65,14 @@ public abstract class AbstractFilterReaderLineEnding extends FilterReader {
      * @param escapeString Set the value of the escape string.
      */
     public void setEscapeString(String escapeString) {
-        // TODO NPE if escapeString is null ?
         if (escapeString != null && !escapeString.isEmpty()) {
             this.escapeString = escapeString;
             this.useEscape = true;
-            calculateMarkLength();
+        } else {
+            this.escapeString = null;
+            this.useEscape = false;
         }
+        calculateMarkLength();
     }
 
     /**
diff --git a/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java b/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
index 37e1a46..a1444fc 100644
--- a/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
+++ b/src/test/java/org/apache/maven/shared/filtering/InterpolatorFilterReaderLineEndingTest.java
@@ -19,9 +19,17 @@
 package org.apache.maven.shared.filtering;
 
 import java.io.Reader;
+import java.io.StringReader;
 
 import org.codehaus.plexus.interpolation.Interpolator;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.mockito.junit.jupiter.MockitoExtension;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+@ExtendWith(MockitoExtension.class)
 public class InterpolatorFilterReaderLineEndingTest extends AbstractInterpolatorFilterReaderLineEndingTest {
     @Override
     protected Reader getAaaAaaReader(Reader in, Interpolator interpolator) {
@@ -48,4 +56,28 @@ public class InterpolatorFilterReaderLineEndingTest extends AbstractInterpolator
         reader.setEscapeString(escapeString);
         return reader;
     }
+
+    @Test
+    public void setEscapeStringNullShouldDisableEscaping() throws Exception {
+        InterpolatorFilterReaderLineEnding reader =
+                new InterpolatorFilterReaderLineEnding(new StringReader("\\${a}"), null, "${", "}", true);
+        reader.setEscapeString("\\");
+        assertEquals("\\", reader.getEscapeString());
+
+        // Now disable escaping by setting to null
+        reader.setEscapeString(null);
+        assertNull(reader.getEscapeString());
+    }
+
+    @Test
+    public void setEscapeStringEmptyShouldDisableEscaping() throws Exception {
+        InterpolatorFilterReaderLineEnding reader =
+                new InterpolatorFilterReaderLineEnding(new StringReader("\\${a}"), null, "${", "}", true);
+        reader.setEscapeString("\\");
+        assertEquals("\\", reader.getEscapeString());
+
+        // Now disable escaping by setting to empty string
+        reader.setEscapeString("");
+        assertNull(reader.getEscapeString());
+    }
 }