Skip to content

Commit 69ba25d

Browse files
committed
f
1 parent f88fb79 commit 69ba25d

3 files changed

Lines changed: 22 additions & 14 deletions

File tree

src/pybase64/_pybase64.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,9 @@ static PyObject* pybase64_decode_impl(PyObject* self, PyObject* args, PyObject *
887887
case BASE64_DECODE_ERROR_PADDING_BITS_NOT_ALLOWED:
888888
PyErr_SetString(state->binAsciiError, "Non-zero padding bits");
889889
break;
890+
case BASE64_DECODE_ERROR_NON_ASCII:
891+
PyErr_SetString(PyExc_ValueError, "string argument should contain only ASCII characters");
892+
break;
890893
}
891894
goto EXCEPT;
892895
}

tests/test_pybase64.py

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -387,17 +387,17 @@ def test_invalid_altchars_dec_validate(
387387

388388

389389
params_invalid_data_novalidate_values = [
390-
[b"A@@@@FG", None, BinAsciiError, "Incorrect padding|Non-base64 digit found|Only base64 data"],
391-
["ABC€", None, ValueError, "ASCII"],
392-
[3.0, None, TypeError, "bytes-like|buffer interface"],
393-
[memoryview(b"ABCDEFGH")[::2], None, BufferError, "contiguous"],
394-
["a\x80aa", None, ValueError, "ASCII|Non-base64 digit found"],
395-
[b"a\x80aa", None, BinAsciiError, "Incorrect padding|Non-base64 digit found|Only base64 data"],
396-
["a\x80aaa", None, ValueError, "ASCII|Non-base64 digit found"],
397-
[b"ab", None, BinAsciiError, "Incorrect padding"],
398-
[b"abc", None, BinAsciiError, "Incorrect padding"],
399-
[b"ab=", None, BinAsciiError, "Incorrect padding"],
400-
[b"ab==c", None, BinAsciiError, "Incorrect padding|Excess data after"],
390+
[b"A@@@@FG", None, BinAsciiError, r"Incorrect padding|Non-base64 digit found|Only base64 data"],
391+
["ABC€", None, ValueError, re.escape("only ASCII characters")],
392+
[3.0, None, TypeError, r"bytes-like|buffer interface"],
393+
[memoryview(b"ABCDEFGH")[::2], None, BufferError, re.escape("contiguous")],
394+
["a\x80aa", None, ValueError, re.escape("only ASCII characters")],
395+
[b"a\x80aa", None, BinAsciiError, r"Incorrect padding|Non-base64 digit found|Only base64 data"],
396+
["a\x80aaa", None, ValueError, re.escape("only ASCII characters")],
397+
[b"ab", None, BinAsciiError, re.escape("Incorrect padding")],
398+
[b"abc", None, BinAsciiError, re.escape("Incorrect padding")],
399+
[b"ab=", None, BinAsciiError, re.escape("Incorrect padding")],
400+
[b"ab==c", None, BinAsciiError, r"Incorrect padding|Excess data after"],
401401
]
402402
params_invalid_data_validate_values = [
403403
[b"\x00\x00\x00\x00", None, BinAsciiError, None],
@@ -407,7 +407,12 @@ def test_invalid_altchars_dec_validate(
407407
[b"A@@@@FGHIJKLMNOPQRSTUVWXYZabcde@=", b"-_", BinAsciiError, None],
408408
[b"A@@@@FGHIJKLMNOPQRSTUVWXYZabcd@==", b"-_", BinAsciiError, None],
409409
[b"A@@@@FGH" * 10000, b"-_", BinAsciiError, None],
410-
[b"a\x80aaa", None, BinAsciiError, "Incorrect padding|Non-base64 digit found|Only base64 data"],
410+
[
411+
b"a\x80aaa",
412+
None,
413+
BinAsciiError,
414+
r"Incorrect padding|Non-base64 digit found|Only base64 data",
415+
],
411416
]
412417
params_invalid_data_all = pytest.mark.parametrize(
413418
("vector", "altchars", "exception", "match"),
@@ -815,7 +820,7 @@ def test_ignorechars_invalid(simd: int) -> None:
815820
msg = re.escape("validate must be True or unspecified when ignorechars is specified")
816821
with pytest.raises(ValueError, match=msg):
817822
pybase64.b64decode(b"", validate=False, ignorechars=b"")
818-
with pytest.raises(ValueError, match=r"ASCII|Non-base64 digit found"):
823+
with pytest.raises(ValueError, match=re.escape("only ASCII characters")):
819824
pybase64.b64decode("YW\x80Jj", ignorechars=b"\x80")
820825

821826

0 commit comments

Comments
 (0)