diff --git a/libs/openzap/mod_openzap/mod_openzap.c b/libs/openzap/mod_openzap/mod_openzap.c index 7e8173702f..e915c2d368 100644 --- a/libs/openzap/mod_openzap/mod_openzap.c +++ b/libs/openzap/mod_openzap/mod_openzap.c @@ -1893,6 +1893,7 @@ static switch_status_t load_config(void) if (zap_configure_span("isdn", span, on_clear_channel_signal, "mode", mode, "dialect", dialect, + "opts", opts, "q921loglevel", q921loglevel, "q931loglevel", q931loglevel, TAG_END) != ZAP_SUCCESS) { diff --git a/libs/openzap/src/ozmod/ozmod_isdn/ozmod_isdn.c b/libs/openzap/src/ozmod/ozmod_isdn/ozmod_isdn.c index c226d72aec..ca6a7fdd65 100644 --- a/libs/openzap/src/ozmod/ozmod_isdn/ozmod_isdn.c +++ b/libs/openzap/src/ozmod/ozmod_isdn/ozmod_isdn.c @@ -1726,11 +1726,11 @@ static ZIO_SIG_CONFIGURE_FUNCTION(zap_isdn_configure_span) dialect = Q931_Dialect_National; } } else if (!strcasecmp(var, "opts")) { - int *optp; - if (!(optp = va_arg(ap, int *))) { - break; - } - opts = isdn_data->opts = *optp; + opts = va_arg(ap, uint32_t); + if (opts >= ZAP_ISDN_OPT_MAX) { + return ZAP_FAIL; + } + isdn_data->opts = opts; } else if (!strcasecmp(var, "tonemap")) { if (!(val = va_arg(ap, char *))) { break; diff --git a/libs/openzap/src/ozmod/ozmod_isdn/zap_isdn.h b/libs/openzap/src/ozmod/ozmod_isdn/zap_isdn.h index 86a3f40155..cf45908364 100644 --- a/libs/openzap/src/ozmod/ozmod_isdn/zap_isdn.h +++ b/libs/openzap/src/ozmod/ozmod_isdn/zap_isdn.h @@ -37,7 +37,9 @@ typedef enum { ZAP_ISDN_OPT_NONE = 0, - ZAP_ISDN_OPT_SUGGEST_CHANNEL = (1 << 0) + ZAP_ISDN_OPT_SUGGEST_CHANNEL = (1 << 0), + + ZAP_ISDN_OPT_MAX = (2 << 0) } zap_isdn_opts_t; typedef enum {