mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #3771 from isac322/fix_test_b64decode_padding_error
fix(binascii): a2b_base64() raises on non padded input
This commit is contained in:
2
Lib/test/test_base64.py
vendored
2
Lib/test/test_base64.py
vendored
@@ -235,8 +235,6 @@ class BaseXYTestCase(unittest.TestCase):
|
||||
b'\xd3V\xbeo\xf7\x1d')
|
||||
self.check_decode_type_errors(base64.urlsafe_b64decode)
|
||||
|
||||
# TODO: RUSTPYTHON
|
||||
@unittest.expectedFailure
|
||||
def test_b64decode_padding_error(self):
|
||||
self.assertRaises(binascii.Error, base64.b64decode, b'abc')
|
||||
self.assertRaises(binascii.Error, base64.b64decode, 'abc')
|
||||
|
||||
@@ -5,7 +5,7 @@ pub(super) use decl::crc32;
|
||||
#[pymodule(name = "binascii")]
|
||||
mod decl {
|
||||
use crate::vm::{
|
||||
builtins::{PyIntRef, PyTypeRef},
|
||||
builtins::{PyBaseExceptionRef, PyIntRef, PyTypeRef},
|
||||
function::{ArgAsciiBuffer, ArgBytesLike, OptionalArg},
|
||||
PyResult, VirtualMachine,
|
||||
};
|
||||
@@ -93,6 +93,10 @@ mod decl {
|
||||
newline: bool,
|
||||
}
|
||||
|
||||
fn new_binascii_error(msg: String, vm: &VirtualMachine) -> PyBaseExceptionRef {
|
||||
vm.new_exception_msg(error_type(vm), msg)
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
fn a2b_base64(s: ArgAsciiBuffer, vm: &VirtualMachine) -> PyResult<Vec<u8>> {
|
||||
s.with_ref(|b| {
|
||||
@@ -104,9 +108,12 @@ mod decl {
|
||||
} else {
|
||||
b
|
||||
};
|
||||
if b.len() % 4 != 0 {
|
||||
return Err(base64::DecodeError::InvalidLength);
|
||||
}
|
||||
base64::decode(b)
|
||||
})
|
||||
.map_err(|err| vm.new_value_error(format!("error decoding base64: {}", err)))
|
||||
.map_err(|err| new_binascii_error(format!("error decoding base64: {}", err), vm))
|
||||
}
|
||||
|
||||
#[pyfunction]
|
||||
|
||||
Reference in New Issue
Block a user