From 4e14449054a7986d870326623354880d86d8e9ed Mon Sep 17 00:00:00 2001 From: Stan Ulbrych Date: Sun, 2 Nov 2025 10:30:50 +0000 Subject: [PATCH] Commit --- iconvcodec.py | 10 ++++++---- test_iconvcodec.py | 7 +++++++ 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/iconvcodec.py b/iconvcodec.py index e3fba23..bb2b3aa 100644 --- a/iconvcodec.py +++ b/iconvcodec.py @@ -39,8 +39,6 @@ def _iconv_encode_impl(encoder, msg, errors, bufsize=None): out1, len1 = _iconv_encode_impl( encoder, msg[inlen:].decode()[1:].encode(), errors ) - else: - raise ValueError("unsupported error handling") return outres + out1, inlen + len1 + 1 raise @@ -74,8 +72,6 @@ def _iconv_decode_impl(decoder, msg, errors, bufsize=None): out1, len1 = _iconv_decode_impl(decoder, msg[inlen + 1 :], errors) elif errors == "ignore": out1, len1 = _iconv_decode_impl(decoder, msg[inlen + 1 :], errors) - else: - raise ValueError("unsupported error handling") return outres.decode() + out1, inlen + len1 + 1 @@ -93,9 +89,15 @@ def codec_factory(encoding): def encode(inp, errors="strict"): msg = inp.encode() + if errors not in ("strict", "replace", "ignore"): + raise ValueError("unsupported error handling") + return _iconv_encode_impl(encoder, msg, errors) def decode(msg, errors="strict"): + if errors not in ("strict", "replace", "ignore"): + raise ValueError("unsupported error handling") + return _iconv_decode_impl(decoder, msg, errors) return encode, decode diff --git a/test_iconvcodec.py b/test_iconvcodec.py index aaa5bc9..644ba48 100644 --- a/test_iconvcodec.py +++ b/test_iconvcodec.py @@ -45,3 +45,10 @@ def test_incremental_decode(self): self.assertEqual(first, "") self.assertEqual(second, "\u0141") + + def test_invalid_errors(self): + with self.assertRaisesRegex(ValueError, "unsupported error handling"): + "™".encode("ASCII//TRANSLIT", "WRONG") + + with self.assertRaisesRegex(ValueError, "unsupported error handling"): + b"a".decode("ASCII//TRANSLIT", "WRONG")