From: Dragan Dosen Date: Thu, 11 Jun 2015 19:36:33 +0000 (+0200) Subject: BUG/MEDIUM: init: segfault if global._51d_property_names is not initialized X-Git-Tag: v1.6-dev2~31 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=acd6b1f7675f05ea9c821b827423095b327f67a0;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/src/haproxy.c b/src/haproxy.c index d45914f59f..c73d2e0d66 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 *)); - - i = 0; - list_for_each_entry(name, &global._51d_property_names, list) - _51d_property_list[i++] = name->name; + 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; + } #ifdef FIFTYONEDEGREES_H_TRIE_INCLUDED _51d_dataset_status = fiftyoneDegreesInitWithPropertyArray(global._51d_data_file_path, _51d_property_list, i);