From 47b9809d231c4359c56316130a76f13de2b907f7 Mon Sep 17 00:00:00 2001 From: Damien George Date: Sun, 3 May 2015 23:23:18 +0100 Subject: py: Check that arg to object.__new__ is a user-defined type. Addresses issue #1203. --- py/objobject.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'py/objobject.c') diff --git a/py/objobject.c b/py/objobject.c index c5675c071..7288ac946 100644 --- a/py/objobject.c +++ b/py/objobject.c @@ -26,10 +26,9 @@ #include +#include "py/objtype.h" #include "py/runtime.h" -mp_obj_t instance_make_new(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args); - typedef struct _mp_obj_object_t { mp_obj_base_t base; } mp_obj_object_t; @@ -50,8 +49,12 @@ STATIC mp_obj_t object___init__(mp_obj_t self) { STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___init___obj, object___init__); STATIC mp_obj_t object___new__(mp_obj_t cls) { + if (!MP_OBJ_IS_TYPE(cls, &mp_type_type) || !mp_obj_is_instance_type((mp_obj_type_t*)cls)) { + nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, + "__new__ arg must be a user-type")); + } mp_obj_t o = MP_OBJ_SENTINEL; - mp_obj_t res = instance_make_new(cls, 1, 0, &o); + mp_obj_t res = mp_obj_instance_make_new(cls, 1, 0, &o); return res; } STATIC MP_DEFINE_CONST_FUN_OBJ_1(object___new___fun_obj, object___new__); -- cgit v1.2.3