There was an error while loading. Please reload this page.
1 parent adf9aea commit 799ce31Copy full SHA for 799ce31
2 files changed
Lib/test/test_hashlib.py
@@ -295,8 +295,6 @@ def test_hexdigest(self):
295
self.assertIsInstance(h.digest(), bytes)
296
self.assertEqual(hexstr(h.digest()), h.hexdigest())
297
298
- # TODO: RUSTPYTHON
299
- @unittest.expectedFailure
300
def test_digest_length_overflow(self):
301
# See issue #34922
302
large_sizes = (2**29, 2**32-10, 2**32+10, 2**61, 2**64-10, 2**64+10)
crates/stdlib/src/hashlib.rs
@@ -83,9 +83,16 @@ pub mod _hashlib {
83
}
84
85
impl XofDigestArgs {
86
+ // Match CPython's SHAKE output guard in Modules/sha3module.c.
87
+ const MAX_SHAKE_OUTPUT_LENGTH: usize = 1 << 29;
88
+
89
fn length(&self, vm: &VirtualMachine) -> PyResult<usize> {
- usize::try_from(self.length)
- .map_err(|_| vm.new_value_error("length must be non-negative"))
90
+ let length = usize::try_from(self.length)
91
+ .map_err(|_| vm.new_value_error("length must be non-negative"))?;
92
+ if length >= Self::MAX_SHAKE_OUTPUT_LENGTH {
93
+ return Err(vm.new_value_error("length is too large"));
94
+ }
95
+ Ok(length)
96
97
98
0 commit comments