diff --git a/cores/arduino/analog.cpp b/cores/arduino/analog.cpp
index cd61c281f..ce3995727 100644
--- a/cores/arduino/analog.cpp
+++ b/cores/arduino/analog.cpp
@@ -799,6 +799,7 @@ void analogWrite(pin_size_t pinNumber, int value)
 
   if(ptr != nullptr) {
     //check the pinmux in case it's been modified by a call to pinMode()
+    if (pinNumber >= (g_pin_cfg_size / sizeof(g_pin_cfg[0]))) return;  /* pinNumber > sizeof of pin table */
     bool has_peripheral_mux = R_PFS->PORT[g_pin_cfg[pinNumber].pin >> IOPORT_PRV_PORT_OFFSET].PIN[g_pin_cfg[pinNumber].pin & BSP_IO_PRV_8BIT_MASK].PmnPFS & IOPORT_CFG_PERIPHERAL_PIN;
     if (!has_peripheral_mux) {
       ptr->end();
diff --git a/cores/arduino/digital.cpp b/cores/arduino/digital.cpp
index fceeb5d21..fbb7867b7 100644
--- a/cores/arduino/digital.cpp
+++ b/cores/arduino/digital.cpp
@@ -1,6 +1,7 @@
 #include "Arduino.h"
 
 void pinMode(pin_size_t pin, const PinMode mode) {
+    if (pin >= (g_pin_cfg_size / sizeof(g_pin_cfg[0]))) return;  /* pinNumber > sizeof of pin table */
 	switch (mode) {
 		case INPUT:
 		case INPUT_PULLDOWN: // TODO: document the INPUT_PULLDOWN is unavailable
@@ -19,10 +20,12 @@ void pinMode(pin_size_t pin, const PinMode mode) {
 }
 
 void digitalWrite(pin_size_t pin, PinStatus val) {
+    if (pin >= (g_pin_cfg_size / sizeof(g_pin_cfg[0]))) return;  /* pinNumber > sizeof of pin table */
 	R_IOPORT_PinWrite(NULL, g_pin_cfg[pin].pin, val == LOW ? BSP_IO_LEVEL_LOW : BSP_IO_LEVEL_HIGH);
 }
 
 PinStatus digitalRead(pin_size_t pin) {
+    if (pin >= (g_pin_cfg_size / sizeof(g_pin_cfg[0]))) return LOW;  /* pinNumber > sizeof of pin table */
 	bsp_io_level_t ret;
 	R_IOPORT_PinRead(NULL, g_pin_cfg[pin].pin, &ret);
 	return (ret == BSP_IO_LEVEL_LOW ? LOW : HIGH);