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.
This commit is contained in:
Dragan Dosen 2015-06-11 21:36:33 +02:00 committed by Willy Tarreau
parent 28b48ccbc8
commit acd6b1f767

View File

@ -185,6 +185,9 @@ struct global global = {
.jsonpath = 0, .jsonpath = 0,
.separator = '|', .separator = '|',
}, },
#endif
#ifdef USE_51DEGREES
._51d_property_names = LIST_HEAD_INIT(global._51d_property_names),
#endif #endif
/* others NULL OK */ /* others NULL OK */
}; };
@ -548,7 +551,7 @@ void init(int argc, char **argv)
#ifdef USE_51DEGREES #ifdef USE_51DEGREES
int i = 0; int i = 0;
struct _51d_property_names *name; struct _51d_property_names *name;
char **_51d_property_list; char **_51d_property_list = NULL;
fiftyoneDegreesDataSetInitStatus _51d_dataset_status = DATA_SET_INIT_STATUS_NOT_SET; fiftyoneDegreesDataSetInitStatus _51d_dataset_status = DATA_SET_INIT_STATUS_NOT_SET;
#endif #endif
@ -1099,14 +1102,16 @@ void init(int argc, char **argv)
exit(1); exit(1);
#ifdef USE_51DEGREES #ifdef USE_51DEGREES
i = 0; if (!LIST_ISEMPTY(&global._51d_property_names)) {
list_for_each_entry(name, &global._51d_property_names, list) i = 0;
++i; list_for_each_entry(name, &global._51d_property_names, list)
_51d_property_list = calloc(i, sizeof(char *)); ++i;
_51d_property_list = calloc(i, sizeof(char *));
i = 0; i = 0;
list_for_each_entry(name, &global._51d_property_names, list) list_for_each_entry(name, &global._51d_property_names, list)
_51d_property_list[i++] = name->name; _51d_property_list[i++] = name->name;
}
#ifdef FIFTYONEDEGREES_H_TRIE_INCLUDED #ifdef FIFTYONEDEGREES_H_TRIE_INCLUDED
_51d_dataset_status = fiftyoneDegreesInitWithPropertyArray(global._51d_data_file_path, _51d_property_list, i); _51d_dataset_status = fiftyoneDegreesInitWithPropertyArray(global._51d_data_file_path, _51d_property_list, i);