@@ -65,17 +65,17 @@ ISREntry ISRs[ALL_ISRS];
6565int isr_index = 0 ;
6666
6767/* Private macro to install an ISR */
68- #define install_isr (number ) \
69- { \
70- dbg_info (" installing isr number: %d of %d with name: %s\n " , \
71- isr_index + 1 , ALL_ISRS, isr_##number); \
72- if (isr_index < ALL_ISRS) { \
73- ISREntry *p = &ISRs[isr_index++]; \
74- p->pin = number; \
75- p->ISR_callback = &(isr_##number); \
76- } else { \
77- FATAL (" isr_index out of bounds" ); \
78- } \
68+ #define install_isr (number ) \
69+ { \
70+ dbg_info (" installing isr number: %d of %d with name: %s\n " , \
71+ isr_index + 1 , ALL_ISRS, isr_##number); \
72+ if (isr_index < ALL_ISRS) { \
73+ ISREntry *p = &ISRs[isr_index++]; \
74+ p->pin = number; \
75+ p->ISR_callback = &(isr_##number); \
76+ } else { \
77+ FATAL (" isr_index out of bounds" ); \
78+ } \
7979 }
8080
8181#define INTERRUPT_TOPIC_PREFIX " interrupt_"
@@ -610,7 +610,12 @@ def_prim(subscribe_interrupt, threeToNoneU32) {
610610
611611 int index = resolve_isr (pin);
612612 if (index < 0 ) {
613- dbg_info (" subscribe_interrupt: no ISR found for pin %i" , pin);
613+ dbg_info (" subscribe_interrupt: no ISR found for pin %i\n " , pin);
614+ return false ;
615+ }
616+
617+ if (tidx < 0 || m->table .size < tidx) {
618+ dbg_info (" subscribe_interrupt: out of range table index %i\n " , tidx);
614619 return false ;
615620 }
616621
0 commit comments