Skip to content

Commit 97cdded

Browse files
authored
Merge pull request RustPython#1853 from youknowone/bytes-overflow
Fix new bytes with overflow error
2 parents b000b21 + aa36a94 commit 97cdded

File tree

2 files changed

+13
-4
lines changed

2 files changed

+13
-4
lines changed

Lib/test/test_bytes.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,6 @@ def __index__(self):
157157

158158
self.assertEqual(self.type2test(B(b"foobar")), b"foobar")
159159

160-
@unittest.skip("TODO: RUSTPYTHON")
161160
def test_from_ssize(self):
162161
self.assertEqual(self.type2test(0), b'')
163162
self.assertEqual(self.type2test(1), b'\x00')

vm/src/obj/objbyteinner.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,19 @@ impl ByteInnerNewOptions {
8585
let value = if let OptionalArg::Present(ival) = self.val_option {
8686
match_class!(match ival.clone() {
8787
i @ PyInt => {
88-
let size = objint::get_value(&i.into_object())
89-
.to_usize()
90-
.ok_or_else(|| vm.new_value_error("negative count".to_owned()))?;
88+
let size =
89+
objint::get_value(&i.into_object())
90+
.to_isize()
91+
.ok_or_else(|| {
92+
vm.new_overflow_error(
93+
"cannot fit 'int' into an index-sized integer".to_owned(),
94+
)
95+
})?;
96+
let size = if size < 0 {
97+
return Err(vm.new_value_error("negative count".to_owned()));
98+
} else {
99+
size as usize
100+
};
91101
Ok(vec![0; size])
92102
}
93103
_l @ PyString => {

0 commit comments

Comments
 (0)