diff options
-rw-r--r-- | include/asterisk/event.h | 7 | ||||
-rw-r--r-- | main/event.c | 5 | ||||
-rw-r--r-- | res/ais/evt.c | 7 |
3 files changed, 19 insertions, 0 deletions
diff --git a/include/asterisk/event.h b/include/asterisk/event.h index 73f121c97..90e27b2f6 100644 --- a/include/asterisk/event.h +++ b/include/asterisk/event.h @@ -743,6 +743,13 @@ void *ast_event_iterator_get_ie_raw(struct ast_event_iterator *iterator); */ uint16_t ast_event_iterator_get_ie_raw_payload_len(struct ast_event_iterator *iterator); +/*! + * \brief Get the minimum length of an ast_event. + * + * \return minimum amount of memory that will be consumed by any ast_event. + */ +size_t ast_event_minimum_length(void); + #if defined(__cplusplus) || defined(c_plusplus) } #endif diff --git a/main/event.c b/main/event.c index fad8e66ee..a62e73637 100644 --- a/main/event.c +++ b/main/event.c @@ -1769,3 +1769,8 @@ int ast_event_init(void) return 0; } + +size_t ast_event_minimum_length(void) +{ + return sizeof(struct ast_event); +} diff --git a/res/ais/evt.c b/res/ais/evt.c index 88b8a6ffd..8d11c6473 100644 --- a/res/ais/evt.c +++ b/res/ais/evt.c @@ -135,6 +135,13 @@ void evt_event_deliver_cb(SaEvtSubscriptionIdT sub_id, return; } + if (event_datalen < ast_event_minimum_length()) { + ast_debug(1, "Ignoring event that's too small. %u < %u\n", + (unsigned int) event_datalen, + (unsigned int) ast_event_minimum_length()); + return; + } + ais_res = saEvtEventDataGet(event_handle, event, &len); if (ais_res != SA_AIS_OK) { ast_log(LOG_ERROR, "Error retrieving event payload: %s\n", |