From 6ca4fd82eddcaaf75b0052d6a14a5938ffce8153 Mon Sep 17 00:00:00 2001 From: Radomir Dopieralski Date: Sat, 31 Mar 2018 20:41:16 +0200 Subject: [PATCH] Add a type check to the gamepad module Make sure that all the arguments passed are indeed DigitalInOut. This avoids crashes when the users pass something else. --- shared-bindings/gamepad/GamePad.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/shared-bindings/gamepad/GamePad.c b/shared-bindings/gamepad/GamePad.c index a03b9318d8..d80d1fcf65 100644 --- a/shared-bindings/gamepad/GamePad.c +++ b/shared-bindings/gamepad/GamePad.c @@ -27,6 +27,7 @@ #include "py/runtime.h" #include "py/mphal.h" #include "shared-module/gamepad/GamePad.h" +#include "shared-bindings/digitalio/DigitalInOut.h" #include "GamePad.h" @@ -96,6 +97,12 @@ STATIC mp_obj_t gamepad_make_new(const mp_obj_type_t *type, size_t n_args, gamepad_singleton = m_new_obj(gamepad_obj_t); gamepad_singleton->base.type = &gamepad_type; } + for (size_t i = 0; i < n_args; ++i) { + if (!MP_OBJ_IS_TYPE(args[i], &digitalio_digitalinout_type)) { + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, + "Expected a %q", digitalio_digitalinout_type.name)); + } + } gamepad_init(n_args, args); return MP_OBJ_FROM_PTR(gamepad_singleton); }