diff options
| author | Damien George | 2015-11-23 15:57:00 +0000 |
|---|---|---|
| committer | Damien George | 2015-11-23 15:57:00 +0000 |
| commit | 0e3f29cc9973dc3c522941858f1f0fb4c6b2cba0 (patch) | |
| tree | 3fe6fc35c3a453ae6a525a18170cd5bce90220f6 | |
| parent | a8aa1998ce1d602738dfab15a5d8b9335586aad6 (diff) | |
py: Check that second argument to hasattr is actually a string.
Fixes issue #1623.
| -rw-r--r-- | py/modbuiltins.c | 4 | ||||
| -rw-r--r-- | tests/basics/hasattr1.py | 10 |
2 files changed, 12 insertions, 2 deletions
diff --git a/py/modbuiltins.c b/py/modbuiltins.c index dd8499ba6..e39c20b60 100644 --- a/py/modbuiltins.c +++ b/py/modbuiltins.c @@ -529,14 +529,14 @@ STATIC mp_obj_t mp_builtin_setattr(mp_obj_t base, mp_obj_t attr, mp_obj_t value) MP_DEFINE_CONST_FUN_OBJ_3(mp_builtin_setattr_obj, mp_builtin_setattr); STATIC mp_obj_t mp_builtin_hasattr(mp_obj_t object_in, mp_obj_t attr_in) { - assert(MP_OBJ_IS_QSTR(attr_in)); + qstr attr = mp_obj_str_get_qstr(attr_in); mp_obj_t dest[2]; // TODO: https://docs.python.org/3/library/functions.html?highlight=hasattr#hasattr // explicitly says "This is implemented by calling getattr(object, name) and seeing // whether it raises an AttributeError or not.", so we should explicitly wrap this // in nlr_push and handle exception. - mp_load_method_maybe(object_in, MP_OBJ_QSTR_VALUE(attr_in), dest); + mp_load_method_maybe(object_in, attr, dest); return mp_obj_new_bool(dest[0] != MP_OBJ_NULL); } diff --git a/tests/basics/hasattr1.py b/tests/basics/hasattr1.py index b1c4b5ceb..118a19e57 100644 --- a/tests/basics/hasattr1.py +++ b/tests/basics/hasattr1.py @@ -27,3 +27,13 @@ c = C() print(hasattr(c, "exists")) # TODO #print(hasattr(c, "doesnt_exist")) + +try: + hasattr(1, b'123') +except TypeError: + print('TypeError') + +try: + hasattr(1, 123) +except TypeError: + print('TypeError') |
