From 6814000682faa776cc42668b4982ad6fef045a1f Mon Sep 17 00:00:00 2001 From: farkhalit rida Date: Wed, 29 Jul 2026 16:11:59 +0530 Subject: [PATCH] reject unpaired UTF-16 surrogates in Character type converter --- src/main/java/org/apache/commons/cli/TypeHandler.java | 3 +++ src/test/java/org/apache/commons/cli/TypeHandlerTest.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/main/java/org/apache/commons/cli/TypeHandler.java b/src/main/java/org/apache/commons/cli/TypeHandler.java index d889dfcf7..abcb78e51 100644 --- a/src/main/java/org/apache/commons/cli/TypeHandler.java +++ b/src/main/java/org/apache/commons/cli/TypeHandler.java @@ -236,6 +236,9 @@ public static FileInputStream openFile(final String string) throws ParseExceptio if (!Character.isBmpCodePoint(codePoint)) { throw new IllegalArgumentException("Code point U+" + Integer.toHexString(codePoint) + " does not fit in a char"); } + if (Character.isSurrogate((char) codePoint)) { + throw new IllegalArgumentException("Code point U+" + Integer.toHexString(codePoint) + " is an unpaired UTF-16 surrogate"); + } return (char) codePoint; } return s.charAt(0); diff --git a/src/test/java/org/apache/commons/cli/TypeHandlerTest.java b/src/test/java/org/apache/commons/cli/TypeHandlerTest.java index 8b6b21820..fe14877ac 100644 --- a/src/test/java/org/apache/commons/cli/TypeHandlerTest.java +++ b/src/test/java/org/apache/commons/cli/TypeHandlerTest.java @@ -135,6 +135,8 @@ private static Stream createValueTestParameters() throws MalformedURL list.add(Arguments.of("5.5", Character.class, '5')); list.add(Arguments.of("\\u0124", Character.class, Character.toChars(0x0124)[0])); list.add(Arguments.of("\\u1F600", Character.class, ParseException.class)); + list.add(Arguments.of("\\uD800", Character.class, ParseException.class)); + list.add(Arguments.of("\\uDFFF", Character.class, ParseException.class)); list.add(Arguments.of("just-a-string", Double.class, ParseException.class)); list.add(Arguments.of("5", Double.class, 5d));