extmod/moductypes: Validate that uctypes.struct addr argument is an int.

Fixes issue #12660.

Signed-off-by: Damien George <damien@micropython.org>
pull/12669/head
Damien George 2023-10-12 15:45:40 +11:00
rodzic 5015779a6f
commit 05cb1406ad
3 zmienionych plików z 8 dodań i 1 usunięć

Wyświetl plik

@ -96,7 +96,7 @@ STATIC NORETURN void syntax_error(void) {
STATIC mp_obj_t uctypes_struct_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
mp_arg_check_num(n_args, n_kw, 2, 3, false);
mp_obj_uctypes_struct_t *o = mp_obj_malloc(mp_obj_uctypes_struct_t, type);
o->addr = (void *)(uintptr_t)mp_obj_int_get_truncated(args[0]);
o->addr = (void *)(uintptr_t)mp_obj_get_int_truncated(args[0]);
o->desc = args[1];
o->flags = LAYOUT_NATIVE;
if (n_args == 3) {

Wyświetl plik

@ -8,6 +8,12 @@ except ImportError:
data = bytearray(b"01234567")
# first argument isn't an integer
try:
uctypes.struct(data, {})
except TypeError:
print("TypeError")
# del subscr not supported
S = uctypes.struct(uctypes.addressof(data), {})
try:

Wyświetl plik

@ -3,3 +3,4 @@ TypeError
TypeError
TypeError
TypeError
TypeError