diff --git a/pyrit/converter/unicode_sub_converter.py b/pyrit/converter/unicode_sub_converter.py index 79ce3eef22..f16a1ed8c0 100644 --- a/pyrit/converter/unicode_sub_converter.py +++ b/pyrit/converter/unicode_sub_converter.py @@ -20,7 +20,12 @@ def __init__(self, *, start_value: int = 0xE0000) -> None: Args: start_value (int): The unicode starting point to use for encoding. + + Raises: + ValueError: If ``start_value`` is outside the Unicode code point range. """ + if not 0 <= start_value <= 0x10FFFF: + raise ValueError("start_value must be a valid Unicode code point between 0 and 0x10FFFF") self.startValue = start_value def _build_identifier(self) -> ComponentIdentifier: diff --git a/tests/unit/converter/test_unicode_sub_converter.py b/tests/unit/converter/test_unicode_sub_converter.py index f76a2df660..3084550fc6 100644 --- a/tests/unit/converter/test_unicode_sub_converter.py +++ b/tests/unit/converter/test_unicode_sub_converter.py @@ -22,6 +22,12 @@ async def test_unicode_sub_custom_start(): assert result.output_type == "text" +@pytest.mark.parametrize("start_value", [-1, 0x110000]) +def test_unicode_sub_rejects_invalid_start_value(start_value): + with pytest.raises(ValueError, match="valid Unicode code point"): + UnicodeSubstitutionConverter(start_value=start_value) + + async def test_unicode_sub_empty(): converter = UnicodeSubstitutionConverter() result = await converter.convert_async(prompt="", input_type="text")