Skip to content

Commit

Permalink
py/objint: In to_bytes(), allow length arg to be any int and check sign.
Browse files Browse the repository at this point in the history
  • Loading branch information
dpgeorge committed Jun 15, 2017
1 parent 8c5632a commit e269cab
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
5 changes: 4 additions & 1 deletion py/objint.c
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,10 @@ STATIC mp_obj_t int_to_bytes(size_t n_args, const mp_obj_t *args) {
// TODO: Support signed param (assumes signed=False)
(void)n_args;

mp_uint_t len = MP_OBJ_SMALL_INT_VALUE(args[1]);
mp_int_t len = mp_obj_get_int(args[1]);
if (len < 0) {
mp_raise_ValueError(NULL);
}
bool big_endian = args[2] != MP_OBJ_NEW_QSTR(MP_QSTR_little);

vstr_t vstr;
Expand Down
6 changes: 6 additions & 0 deletions tests/basics/int_bytes.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,3 +14,9 @@
print((100).to_bytes(10, "big"))
print(int.from_bytes(b"\0\0\0\0\0\0\0\0\0\x01", "big"))
print(int.from_bytes(b"\x01\0", "big"))

# negative number of bytes should raise an error
try:
(1).to_bytes(-1, "little")
except ValueError:
print("ValueError")

0 comments on commit e269cab

Please sign in to comment.