From f14c5cc0f7e1efd270c601ad6954fa7fc55d4789 Mon Sep 17 00:00:00 2001 From: Sahana Bogar Date: Wed, 23 Sep 2026 21:46:46 +0530 Subject: [PATCH] restrict ISBN group separators to a dash or space The SEP fragment shared by ISBN10_REGEX and ISBN13_REGEX matched any \s character, so tab, line feed, carriage return, vertical tab and form feed were accepted between groups although the Javadoc only allows a dash or a space. Narrow it to those two characters and add the control-character cases to the invalid-format fixtures for both lengths. --- .../commons/validator/routines/ISBNValidator.java | 2 +- .../commons/validator/routines/ISBNValidatorTest.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/apache/commons/validator/routines/ISBNValidator.java b/src/main/java/org/apache/commons/validator/routines/ISBNValidator.java index eebca457f..da0fa7e48 100644 --- a/src/main/java/org/apache/commons/validator/routines/ISBNValidator.java +++ b/src/main/java/org/apache/commons/validator/routines/ISBNValidator.java @@ -79,7 +79,7 @@ public class ISBNValidator implements Serializable { private static final long serialVersionUID = 4319515687976420405L; - private static final String SEP = "(?:\\-|\\s)"; + private static final String SEP = "[- ]"; private static final String GROUP = "(\\d{1,5})"; private static final String PUBLISHER = "(\\d{1,7})"; private static final String TITLE = "(\\d{1,6})"; diff --git a/src/test/java/org/apache/commons/validator/routines/ISBNValidatorTest.java b/src/test/java/org/apache/commons/validator/routines/ISBNValidatorTest.java index 2ebb2ee1e..4fbf603ef 100644 --- a/src/test/java/org/apache/commons/validator/routines/ISBNValidatorTest.java +++ b/src/test/java/org/apache/commons/validator/routines/ISBNValidatorTest.java @@ -49,6 +49,11 @@ class ISBNValidatorTest { "1.2.3.4", // Invalid Separator "1=2=3=4", // Invalid Separator "1_2_3_4", // Invalid Separator + "1\t930110\t99\t5", // Invalid Separator: tab + "1\n930110\n99\n5", // Invalid Separator: line feed + "1\r930110\r99\r5", // Invalid Separator: carriage return + "1\u000B930110\u000B99\u000B5", // Invalid Separator: vertical tab + "1\f930110\f99\f5", // Invalid Separator: form feed "123456789Y", // Other character at the end "dsasdsadsa", // invalid characters "I love sparrows!", // invalid characters @@ -73,6 +78,11 @@ class ISBNValidatorTest { "123-4-567890-12-8", // format "978.1.2.3.4", // Invalid Separator "978=1=2=3=4", // Invalid Separator + "978\t1\t930110\t99\t1", // Invalid Separator: tab + "978\n1\n930110\n99\n1", // Invalid Separator: line feed + "978\r1\r930110\r99\r1", // Invalid Separator: carriage return + "978\u000B1\u000B930110\u000B99\u000B1", // Invalid Separator: vertical tab + "978\f1\f930110\f99\f1", // Invalid Separator: form feed "978_1_2_3_4", // Invalid Separator "978123456789X", // invalid character "978-0-201-63385-X", // invalid character