From b41a5039f1ee16ddbcb5cbef63d5ba9abf802834 Mon Sep 17 00:00:00 2001 From: teor Date: Sun, 22 Mar 2015 14:25:42 +1100 Subject: [PATCH] Compile-time check that control_event_t.event_mask is big enough Add a compile-time check that the number of events doesn't exceed the capacity of control_event_t.event_mask. --- changes/ticket15431 | 4 +++- src/or/control.h | 4 ++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/changes/ticket15431 b/changes/ticket15431 index e35bab6e85..ea6821afdf 100644 --- a/changes/ticket15431 +++ b/changes/ticket15431 @@ -1,4 +1,6 @@ o Minor features (testing): - Add unit tests for control_event_is_interesting(). - Part of ticket 15431, checks for bugs similar to 13085. + Add a compile-time check that the number of events doesn't exceed + the capacity of control_event_t.event_mask. + Closes ticket 15431, checks for bugs similar to 13085. Patch by "teor". diff --git a/src/or/control.h b/src/or/control.h index 9b0362a9a5..dbb80b1f20 100644 --- a/src/or/control.h +++ b/src/or/control.h @@ -166,6 +166,10 @@ void control_free_all(void); /* If EVENT_MAX_ ever hits 0x0040, we need to make the mask into a * different structure, as it can only handle a maximum left shift of 1<<63. */ +#if EVENT_MAX_ >= EVENT_CAPACITY_ +#error control_connection_t.event_mask has an event greater than its capacity +#endif + #define EVENT_MASK_(e) (((uint64_t)1)<<(e)) #define EVENT_MASK_NONE_ ((uint64_t)0x0)