summaryrefslogtreecommitdiff
path: root/py/objexcept.c
diff options
context:
space:
mode:
authorJim Mussared <jim.mussared@gmail.com>2023-11-03 14:19:55 +1100
committerDamien George <damien@micropython.org>2023-11-03 16:03:18 +1100
commitb6a977848407a4ced45d118cf926bd915cc89dfb (patch)
tree372814eb7f8234ecc5ffc3a7112ad830e69784d9 /py/objexcept.c
parentc85db05244ef6185fbb3c218c508ddd179830942 (diff)
py/misc: Change sizeof to offsetof for variable-length alloc.
This fixes the case where e.g. struct foo_t { mp_obj_t x; uint16_t y; char buf[]; }; will have `sizeof(struct foo_t)==8`, but `offsetof(struct foo_t, buf)==6`. When computing the size to allocate for `m_new_obj_var` we need to use offsetof to avoid over-allocating. This is important especially when it might cause it to spill over into another GC block. This work was funded through GitHub Sponsors. Signed-off-by: Jim Mussared <jim.mussared@gmail.com>
Diffstat (limited to 'py/objexcept.c')
-rw-r--r--py/objexcept.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/py/objexcept.c b/py/objexcept.c
index a90405c52..a54b81370 100644
--- a/py/objexcept.c
+++ b/py/objexcept.c
@@ -221,7 +221,7 @@ mp_obj_t mp_obj_exception_make_new(const mp_obj_type_t *type, size_t n_args, siz
o_tuple = (mp_obj_tuple_t *)&mp_const_empty_tuple_obj;
} else {
// Try to allocate memory for the tuple containing the args
- o_tuple = m_new_obj_var_maybe(mp_obj_tuple_t, mp_obj_t, n_args);
+ o_tuple = m_new_obj_var_maybe(mp_obj_tuple_t, items, mp_obj_t, n_args);
#if MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF
// If we are called by mp_obj_new_exception_msg_varg then it will have