From: George Joseph Date: Mon, 17 Jun 2019 17:11:49 +0000 (-0600) Subject: chan_dahdi: Address gcc9 issues X-Git-Tag: 13.28.0-rc1~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d0f01af913cad9ec5fe2a496794e960e00f2f474;p=thirdparty%2Fasterisk.git chan_dahdi: Address gcc9 issues Fixed format-truncation issues in chan_dahdi.c and sig_analog.c. Since they're related to fields provided by dahdi-tools we can't change the buffer sizes so we're just checking the return from snprintf and printing an errior if we overflow. Change-Id: Idc1f3c1565b88a7d145332a0196074b5832864e5 --- diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c index d425b323a4..8b70447e9c 100644 --- a/channels/chan_dahdi.c +++ b/channels/chan_dahdi.c @@ -7740,8 +7740,16 @@ static struct ast_frame *dahdi_handle_event(struct ast_channel *ast) c++; else c = p->dialdest; - if (*c) snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); - else ast_copy_string(p->dop.dialstr,"M*2#", sizeof(p->dop.dialstr)); + + if (*c) { + int numchars = snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); + if (numchars >= sizeof(p->dop.dialstr)) { + ast_log(LOG_WARNING, "Dial string '%s' truncated\n", c); + } + } else { + ast_copy_string(p->dop.dialstr,"M*2#", sizeof(p->dop.dialstr)); + } + if (strlen(p->dop.dialstr) > 4) { memset(p->echorest, 'w', sizeof(p->echorest) - 1); strcpy(p->echorest + (p->echotraining / 401) + 1, p->dop.dialstr + strlen(p->dop.dialstr) - 2); diff --git a/channels/sig_analog.c b/channels/sig_analog.c index ea0c31d802..c2e3e496c1 100644 --- a/channels/sig_analog.c +++ b/channels/sig_analog.c @@ -2957,11 +2957,16 @@ static struct ast_frame *__analog_handle_event(struct analog_pvt *p, struct ast_ } else { c = p->dialdest; } + if (*c) { - snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); + int numchars = snprintf(p->dop.dialstr, sizeof(p->dop.dialstr), "M*0%s#", c); + if (numchars >= sizeof(p->dop.dialstr)) { + ast_log(LOG_WARNING, "Dial string '%s' truncated\n", c); + } } else { ast_copy_string(p->dop.dialstr,"M*2#", sizeof(p->dop.dialstr)); } + if (strlen(p->dop.dialstr) > 4) { memset(p->echorest, 'w', sizeof(p->echorest) - 1); strcpy(p->echorest + (p->echotraining / 401) + 1, p->dop.dialstr + strlen(p->dop.dialstr) - 2);