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 | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/haproxy.c b/src/haproxy.c
index d45914f..c73d2e0 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -186,6 +186,9 @@ struct global global = {
.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);
--
1.7.9.5
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 | 23 ++++++++++++++---------
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/src/haproxy.c b/src/haproxy.c
index d45914f..c73d2e0 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -186,6 +186,9 @@ struct global global = {
.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);
--
1.7.9.5