From cf7c8154bfb2c671bb9ee82c6a57b84ecea09583 Mon Sep 17 00:00:00 2001 From: Narawit Rakket Date: Sat, 27 Nov 2021 12:02:06 +0700 Subject: [PATCH] Fix maketrans not thrown ValueError when length of the arguments are not the same --- Lib/test/test_bytes.py | 2 -- vm/src/builtins/bytearray.rs | 4 ++-- vm/src/builtins/bytes.rs | 4 ++-- vm/src/bytesinner.rs | 11 ++++++++++- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py index 4df060766f..3f2197e788 100644 --- a/Lib/test/test_bytes.py +++ b/Lib/test/test_bytes.py @@ -859,8 +859,6 @@ def test_ord(self): self.assertEqual([ord(b[i:i+1]) for i in range(len(b))], [0, 65, 127, 128, 255]) - # TODO: RUSTPYTHON - @unittest.expectedFailure def test_maketrans(self): transtable = b'\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377' self.assertEqual(self.type2test.maketrans(b'abc', b'xyz'), transtable) diff --git a/vm/src/builtins/bytearray.rs b/vm/src/builtins/bytearray.rs index c7eb74165c..ce5ec38c00 100644 --- a/vm/src/builtins/bytearray.rs +++ b/vm/src/builtins/bytearray.rs @@ -228,8 +228,8 @@ impl PyByteArray { } #[pymethod] - fn maketrans(from: PyBytesInner, to: PyBytesInner) -> PyResult> { - PyBytesInner::maketrans(from, to) + fn maketrans(from: PyBytesInner, to: PyBytesInner, vm: &VirtualMachine) -> PyResult> { + PyBytesInner::maketrans(from, to, vm) } #[pymethod] diff --git a/vm/src/builtins/bytes.rs b/vm/src/builtins/bytes.rs index 750a914255..40f1971b49 100644 --- a/vm/src/builtins/bytes.rs +++ b/vm/src/builtins/bytes.rs @@ -150,8 +150,8 @@ impl PyBytes { } #[pymethod] - fn maketrans(from: PyBytesInner, to: PyBytesInner) -> PyResult> { - PyBytesInner::maketrans(from, to) + fn maketrans(from: PyBytesInner, to: PyBytesInner, vm: &VirtualMachine) -> PyResult> { + PyBytesInner::maketrans(from, to, vm) } #[pymethod(magic)] diff --git a/vm/src/bytesinner.rs b/vm/src/bytesinner.rs index 31abb5d855..d81ed7ff26 100644 --- a/vm/src/bytesinner.rs +++ b/vm/src/bytesinner.rs @@ -525,7 +525,16 @@ impl PyBytesInner { Ok(self.elements.py_find(&needle, range, find)) } - pub fn maketrans(from: PyBytesInner, to: PyBytesInner) -> PyResult> { + pub fn maketrans( + from: PyBytesInner, + to: PyBytesInner, + vm: &VirtualMachine, + ) -> PyResult> { + if from.len() != to.len() { + return Err( + vm.new_value_error("the two maketrans arguments must have equal length".to_owned()) + ); + } let mut res = vec![]; for i in 0..=255 {