From 17c5e2e98db662f355d644754a8d63bd79a04078 Mon Sep 17 00:00:00 2001 From: Steve Karg Date: Sun, 2 Jun 2024 07:09:26 -0500 Subject: [PATCH] Added guards in create object initialization to prevent memory leaks (#664) --- src/bacnet/basic/object/calendar.c | 5 ++--- src/bacnet/basic/object/channel.c | 4 +++- src/bacnet/basic/object/color_object.c | 4 +++- src/bacnet/basic/object/color_temperature.c | 4 +++- src/bacnet/basic/object/lo.c | 4 +++- src/bacnet/basic/object/lsp.c | 4 +++- src/bacnet/basic/object/lsz.c | 4 +++- src/bacnet/basic/object/ms-input.c | 4 +++- src/bacnet/basic/object/mso.c | 4 +++- src/bacnet/basic/object/msv.c | 4 +++- src/bacnet/basic/object/structured_view.c | 5 ++--- src/bacnet/basic/object/time_value.c | 5 ++--- 12 files changed, 33 insertions(+), 18 deletions(-) diff --git a/src/bacnet/basic/object/calendar.c b/src/bacnet/basic/object/calendar.c index 451ae402..1e292294 100644 --- a/src/bacnet/basic/object/calendar.c +++ b/src/bacnet/basic/object/calendar.c @@ -772,8 +772,7 @@ void Calendar_Cleanup(void) */ void Calendar_Init(void) { - Object_List = Keylist_Create(); - if (Object_List) { - atexit(Calendar_Cleanup); + if (!Object_List) { + Object_List = Keylist_Create(); } } diff --git a/src/bacnet/basic/object/channel.c b/src/bacnet/basic/object/channel.c index 38f3a537..dd842937 100644 --- a/src/bacnet/basic/object/channel.c +++ b/src/bacnet/basic/object/channel.c @@ -1766,5 +1766,7 @@ void Channel_Cleanup(void) */ void Channel_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/color_object.c b/src/bacnet/basic/object/color_object.c index 68b8be1a..23e69cef 100644 --- a/src/bacnet/basic/object/color_object.c +++ b/src/bacnet/basic/object/color_object.c @@ -1216,5 +1216,7 @@ void Color_Cleanup(void) */ void Color_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/color_temperature.c b/src/bacnet/basic/object/color_temperature.c index 87d8a78d..6bbe354e 100644 --- a/src/bacnet/basic/object/color_temperature.c +++ b/src/bacnet/basic/object/color_temperature.c @@ -1657,5 +1657,7 @@ void Color_Temperature_Cleanup(void) */ void Color_Temperature_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/lo.c b/src/bacnet/basic/object/lo.c index 918985c3..5e8342af 100644 --- a/src/bacnet/basic/object/lo.c +++ b/src/bacnet/basic/object/lo.c @@ -2462,5 +2462,7 @@ void Lighting_Output_Cleanup(void) */ void Lighting_Output_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/lsp.c b/src/bacnet/basic/object/lsp.c index 046ffac8..df7a9b42 100644 --- a/src/bacnet/basic/object/lsp.c +++ b/src/bacnet/basic/object/lsp.c @@ -745,5 +745,7 @@ void Life_Safety_Point_Cleanup(void) */ void Life_Safety_Point_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/lsz.c b/src/bacnet/basic/object/lsz.c index 7a0ef8a9..b07d2d31 100644 --- a/src/bacnet/basic/object/lsz.c +++ b/src/bacnet/basic/object/lsz.c @@ -915,5 +915,7 @@ void Life_Safety_Zone_Cleanup(void) */ void Life_Safety_Zone_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/ms-input.c b/src/bacnet/basic/object/ms-input.c index d127d9b2..4b3874fb 100644 --- a/src/bacnet/basic/object/ms-input.c +++ b/src/bacnet/basic/object/ms-input.c @@ -940,5 +940,7 @@ void Multistate_Input_Cleanup(void) */ void Multistate_Input_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/mso.c b/src/bacnet/basic/object/mso.c index 4e043ed7..97980818 100644 --- a/src/bacnet/basic/object/mso.c +++ b/src/bacnet/basic/object/mso.c @@ -1220,5 +1220,7 @@ void Multistate_Output_Cleanup(void) */ void Multistate_Output_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/msv.c b/src/bacnet/basic/object/msv.c index 2b683637..7573abd9 100644 --- a/src/bacnet/basic/object/msv.c +++ b/src/bacnet/basic/object/msv.c @@ -939,5 +939,7 @@ void Multistate_Value_Cleanup(void) */ void Multistate_Value_Init(void) { - Object_List = Keylist_Create(); + if (!Object_List) { + Object_List = Keylist_Create(); + } } diff --git a/src/bacnet/basic/object/structured_view.c b/src/bacnet/basic/object/structured_view.c index f37ca217..a3eadcff 100644 --- a/src/bacnet/basic/object/structured_view.c +++ b/src/bacnet/basic/object/structured_view.c @@ -860,8 +860,7 @@ void Structured_View_Cleanup(void) */ void Structured_View_Init(void) { - Object_List = Keylist_Create(); - if (Object_List) { - atexit(Structured_View_Cleanup); + if (!Object_List) { + Object_List = Keylist_Create(); } } diff --git a/src/bacnet/basic/object/time_value.c b/src/bacnet/basic/object/time_value.c index b4831093..696200ce 100644 --- a/src/bacnet/basic/object/time_value.c +++ b/src/bacnet/basic/object/time_value.c @@ -809,8 +809,7 @@ void Time_Value_Cleanup(void) */ void Time_Value_Init(void) { - Object_List = Keylist_Create(); - if (Object_List) { - atexit(Time_Value_Cleanup); + if (!Object_List) { + Object_List = Keylist_Create(); } }