From e7ccad5757ebf9af7e49cb5d1b7efb61034e11ca Mon Sep 17 00:00:00 2001 From: Naveed Khan Date: Thu, 23 Jul 2026 15:06:55 +0530 Subject: [PATCH 1/3] disable comment char in ArrayConverter list parsing parseElements left StreamTokenizer's default comment character '/' active, so a list element containing a slash commented out the rest of the input and dropped the following elements. Treat '/' as an ordinary separator instead. --- .../beanutils2/converters/ArrayConverter.java | 1 + .../converters/ArrayConverterTest.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java b/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java index bfcc4e4e7..e2c1c112b 100644 --- a/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java +++ b/src/main/java/org/apache/commons/beanutils2/converters/ArrayConverter.java @@ -340,6 +340,7 @@ private List parseElements(String value) { st.whitespaceChars(delimiter, delimiter); // Set the delimiters st.ordinaryChars('0', '9'); // Needed to turn off numeric flag st.wordChars('0', '9'); // Needed to make part of tokens + st.ordinaryChar('/'); // Turn off the default comment character so it splits like any other separator for (final char allowedChar : allowedChars) { st.ordinaryChars(allowedChar, allowedChar); st.wordChars(allowedChar, allowedChar); diff --git a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java index 5779e83fa..fcf0c1926 100644 --- a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java +++ b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java @@ -248,6 +248,23 @@ void testTheMatrix() { } } + /** + * A forward slash is not an allowed character, so it must split like any other separator (see {@link #testUnderscore_BEANUTILS_302()}) instead of commenting + * out the rest of the input and dropping the remaining elements. + */ + @Test + void testForwardSlashSeparator() { + final String value = "first/value,second/value"; + final ArrayConverter converter = new ArrayConverter(String[].class, new StringConverter()); + final String[] result = converter.convert(String[].class, value); + assertNotNull(result, "result.null"); + assertEquals(4, result.length, "result.length"); + assertEquals("first", result[0], "result[0]"); + assertEquals("value", result[1], "result[1]"); + assertEquals("second", result[2], "result[2]"); + assertEquals("value", result[3], "result[3]"); + } + /** * Test for BEANUTILS-302 - throwing a NPE when underscore used */ From f41f0e4331cca0eb7e516aa020c017d270cedd3c Mon Sep 17 00:00:00 2001 From: Gary Gregory Date: Thu, 23 Jul 2026 07:52:34 -0400 Subject: [PATCH 2/3] Potential fix for pull request finding Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .../commons/beanutils2/converters/ArrayConverterTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java index fcf0c1926..1ea2e84fd 100644 --- a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java +++ b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java @@ -255,7 +255,7 @@ void testTheMatrix() { @Test void testForwardSlashSeparator() { final String value = "first/value,second/value"; - final ArrayConverter converter = new ArrayConverter(String[].class, new StringConverter()); + final ArrayConverter converter = new ArrayConverter<>(String[].class, new StringConverter()); final String[] result = converter.convert(String[].class, value); assertNotNull(result, "result.null"); assertEquals(4, result.length, "result.length"); From 5f340ebe6a6510e4d82caf744269825ff3818c05 Mon Sep 17 00:00:00 2001 From: Naveed Khan Date: Thu, 23 Jul 2026 21:19:11 +0530 Subject: [PATCH 3/3] cover allowed-chars behavior for forward slash in test --- .../beanutils2/converters/ArrayConverterTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java index 1ea2e84fd..0595bac06 100644 --- a/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java +++ b/src/test/java/org/apache/commons/beanutils2/converters/ArrayConverterTest.java @@ -256,13 +256,22 @@ void testTheMatrix() { void testForwardSlashSeparator() { final String value = "first/value,second/value"; final ArrayConverter converter = new ArrayConverter<>(String[].class, new StringConverter()); - final String[] result = converter.convert(String[].class, value); + // test forward slash not allowed (the default) + String[] result = converter.convert(String[].class, value); assertNotNull(result, "result.null"); assertEquals(4, result.length, "result.length"); assertEquals("first", result[0], "result[0]"); assertEquals("value", result[1], "result[1]"); assertEquals("second", result[2], "result[2]"); assertEquals("value", result[3], "result[3]"); + // configure the converter to allow forward slash + converter.setAllowedChars(new char[] { '.', '-', '/' }); + // test forward slash allowed + result = converter.convert(String[].class, value); + assertNotNull(result, "result.null"); + assertEquals(2, result.length, "result.length"); + assertEquals("first/value", result[0], "result[0]"); + assertEquals("second/value", result[1], "result[1]"); } /**