From acd6b1f7675f05ea9c821b827423095b327f67a0 Mon Sep 17 00:00:00 2001 From: Dragan Dosen Date: Thu, 11 Jun 2015 21:36:33 +0200 Subject: [PATCH] BUG/MEDIUM: init: segfault if global._51d_property_names is not initialized When using the "51d" converter without specifying the list of 51Degrees properties to detect (see parameter "51degrees-property-name-list"), the "global._51d_property_names" could be left uninitialized which will lead to segfault during init. --- src/haproxy.c | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/haproxy.c b/src/haproxy.c index d45914f59..c73d2e0d6 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -185,6 +185,9 @@ struct global global = { .jsonpath = 0, .separator = '|', }, +#endif +#ifdef USE_51DEGREES + ._51d_property_names = LIST_HEAD_INIT(global._51d_property_names), #endif /* others NULL OK */ }; @@ -548,7 +551,7 @@ void init(int argc, char **argv) #ifdef USE_51DEGREES int i = 0; struct _51d_property_names *name; - char **_51d_property_list; + char **_51d_property_list = NULL; fiftyoneDegreesDataSetInitStatus _51d_dataset_status = DATA_SET_INIT_STATUS_NOT_SET; #endif @@ -1099,14 +1102,16 @@ void init(int argc, char **argv) exit(1); #ifdef USE_51DEGREES - i = 0; - list_for_each_entry(name, &global._51d_property_names, list) - ++i; - _51d_property_list = calloc(i, sizeof(char *)); + if (!LIST_ISEMPTY(&global._51d_property_names)) { + i = 0; + list_for_each_entry(name, &global._51d_property_names, list) + ++i; + _51d_property_list = calloc(i, sizeof(char *)); - i = 0; - list_for_each_entry(name, &global._51d_property_names, list) - _51d_property_list[i++] = name->name; + i = 0; + list_for_each_entry(name, &global._51d_property_names, list) + _51d_property_list[i++] = name->name; + } #ifdef FIFTYONEDEGREES_H_TRIE_INCLUDED _51d_dataset_status = fiftyoneDegreesInitWithPropertyArray(global._51d_data_file_path, _51d_property_list, i);