py/objarray: Detect bytearray(str) without an encoding.

This prevents a very subtle bug caused by writing e.g. `bytearray('\xfd')`
which gives you `(0xc3, 0xbd)`.

This work was funded through GitHub Sponsors.

Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
This commit is contained in:
Jim Mussared
2022-11-07 12:55:31 +11:00
committed by Damien George
parent f8b0ae32d3
commit 2c8dab7ab4
4 changed files with 18 additions and 1 deletions

View File

@@ -192,6 +192,14 @@ STATIC mp_obj_t bytearray_make_new(const mp_obj_type_t *type_in, size_t n_args,
return MP_OBJ_FROM_PTR(o);
} else {
// 1 arg: construct the bytearray from that
if (mp_obj_is_str(args[0]) && n_args == 1) {
#if MICROPY_ERROR_REPORTING <= MICROPY_ERROR_REPORTING_TERSE
// Match bytes_make_new.
mp_raise_TypeError(MP_ERROR_TEXT("wrong number of arguments"));
#else
mp_raise_TypeError(MP_ERROR_TEXT("string argument without an encoding"));
#endif
}
return array_construct(BYTEARRAY_TYPECODE, args[0]);
}
}