Browse Source

[Pal] Fix off-by-one in DkSetExceptionHandler

Michał Kowalczyk 6 years ago
parent
commit
817f516fce
1 changed files with 3 additions and 2 deletions
  1. 3 2
      Pal/src/db_exception.c

+ 3 - 2
Pal/src/db_exception.c

@@ -31,7 +31,7 @@
 #include "pal_error.h"
 #include "pal_error.h"
 #include "pal_internal.h"
 #include "pal_internal.h"
 
 
-#define INIT_EVENT_HANDLER { .lock = LOCK_INIT }
+#define INIT_EVENT_HANDLER { .lock = LOCK_INIT, .upcall = NULL }
 
 
 struct pal_event_handler {
 struct pal_event_handler {
     PAL_LOCK lock;
     PAL_LOCK lock;
@@ -39,6 +39,7 @@ struct pal_event_handler {
 };
 };
 
 
 struct pal_event_handler handlers[] = {
 struct pal_event_handler handlers[] = {
+    [0]                          = INIT_EVENT_HANDLER,
     [PAL_EVENT_ARITHMETIC_ERROR] = INIT_EVENT_HANDLER,
     [PAL_EVENT_ARITHMETIC_ERROR] = INIT_EVENT_HANDLER,
     [PAL_EVENT_MEMFAULT]         = INIT_EVENT_HANDLER,
     [PAL_EVENT_MEMFAULT]         = INIT_EVENT_HANDLER,
     [PAL_EVENT_ILLEGAL]          = INIT_EVENT_HANDLER,
     [PAL_EVENT_ILLEGAL]          = INIT_EVENT_HANDLER,
@@ -62,7 +63,7 @@ PAL_BOL
 DkSetExceptionHandler(PAL_EVENT_HANDLER handler, PAL_NUM event) {
 DkSetExceptionHandler(PAL_EVENT_HANDLER handler, PAL_NUM event) {
     ENTER_PAL_CALL(DkSetExceptionHandler);
     ENTER_PAL_CALL(DkSetExceptionHandler);
 
 
-    if (!handler || event == 0 || event > sizeof(handlers) / sizeof(handlers[0])) {
+    if (!handler || event == 0 || event >= sizeof(handlers) / sizeof(handlers[0])) {
         _DkRaiseFailure(PAL_ERROR_INVAL);
         _DkRaiseFailure(PAL_ERROR_INVAL);
         LEAVE_PAL_CALL_RETURN(PAL_FALSE);
         LEAVE_PAL_CALL_RETURN(PAL_FALSE);
     }
     }