diff --git a/libs/freetdm/mod_freetdm/mod_freetdm.c b/libs/freetdm/mod_freetdm/mod_freetdm.c index aaddbf69f0..a410e4eac6 100755 --- a/libs/freetdm/mod_freetdm/mod_freetdm.c +++ b/libs/freetdm/mod_freetdm/mod_freetdm.c @@ -2937,15 +2937,22 @@ static switch_status_t load_config(void) continue; } - for (param = switch_xml_child(myspan, "param"); param && paramindex < 10; param = param->next) { + memset(spanparameters, 0, sizeof(spanparameters)); + + for (param = switch_xml_child(myspan, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); - if (ftdm_array_len(spanparameters) == paramindex) { + if (ftdm_array_len(spanparameters) - 1 == paramindex) { ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pri span '%s', ignoring everything after '%s'\n", name, var); break; } + if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) { + ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n"); + continue; + } + if (!strcasecmp(var, "context")) { context = val; } else if (!strcasecmp(var, "dialplan")) { @@ -2995,11 +3002,18 @@ static switch_status_t load_config(void) switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "span missing required attribute 'name'\n"); continue; } - + + memset(spanparameters, 0, sizeof(spanparameters)); + for (param = switch_xml_child(myspan, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); + if (ftdm_array_len(spanparameters) - 1 == paramindex) { + ftdm_log(FTDM_LOG_ERROR, "Too many parameters for pritap span '%s', ignoring everything after '%s'\n", name, var); + break; + } + if (!strcasecmp(var, "context")) { context = val; } else if (!strcasecmp(var, "dialplan")) { @@ -3049,7 +3063,9 @@ static switch_status_t load_config(void) continue; } - for (param = switch_xml_child(myspan, "param"); param && paramindex < 10; param = param->next) { + memset(spanparameters, 0, sizeof(spanparameters)); + + for (param = switch_xml_child(myspan, "param"); param; param = param->next) { char *var = (char *) switch_xml_attr_soft(param, "name"); char *val = (char *) switch_xml_attr_soft(param, "value"); @@ -3058,6 +3074,11 @@ static switch_status_t load_config(void) break; } + if (ftdm_strlen_zero(var) || ftdm_strlen_zero(val)) { + ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with empty name or value\n"); + continue; + } + if (!strcasecmp(var, "context")) { context = val; } else if (!strcasecmp(var, "dialplan")) { diff --git a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c index 1f90d486f3..491ef886fa 100644 --- a/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c +++ b/libs/freetdm/src/ftmod/ftmod_isdn/ftmod_isdn.c @@ -2667,7 +2667,12 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(isdn_configure_span) const char *var = ftdm_parameters[i].var; const char *val = ftdm_parameters[i].val; - if (!val) { + if (ftdm_strlen_zero(var)) { + ftdm_log(FTDM_LOG_WARNING, "Skipping variable with no name\n"); + continue; + } + + if (ftdm_strlen_zero(val)) { ftdm_log(FTDM_LOG_ERROR, "Variable '%s' has no value\n", var); return FTDM_FAIL; } diff --git a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c index 2d6623586a..21d6674717 100644 --- a/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c +++ b/libs/freetdm/src/ftmod/ftmod_libpri/ftmod_libpri.c @@ -1704,11 +1704,16 @@ static FIO_CONFIGURE_SPAN_SIGNALING_FUNCTION(ftdm_libpri_configure_span) return FTDM_FAIL; } - for (i = 0; i < 10 && ftdm_parameters[i].var; i++) { + for (i = 0; ftdm_parameters[i].var; i++) { const char *var = ftdm_parameters[i].var; const char *val = ftdm_parameters[i].val; - if (!val) { + if (ftdm_strlen_zero(var)) { + ftdm_log(FTDM_LOG_WARNING, "Skipping parameter with no name\n"); + continue; + } + + if (ftdm_strlen_zero(val)) { ftdm_log(FTDM_LOG_ERROR, "Parameter '%s' has no value\n", var); snprintf(span->last_error, sizeof(span->last_error), "Parameter [%s] has no value", var); return FTDM_FAIL;