diff options
author | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-07-16 04:40:54 +0000 |
---|---|---|
committer | markster <markster@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-07-16 04:40:54 +0000 |
commit | af243f9bcaab1304ac9213252c8ca124e94530d8 (patch) | |
tree | 2b84082d8285faa07556cfce5ff7367d9a22a640 /channels/chan_skinny.c | |
parent | 0324a6e8e15ec318b768e56302a9dbbf41aea376 (diff) |
Last set of strncpy/snprintf updates (bug #2049)
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@3446 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'channels/chan_skinny.c')
-rwxr-xr-x | channels/chan_skinny.c | 40 |
1 files changed, 26 insertions, 14 deletions
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index 3472cac54..c624324b8 100755 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -1060,7 +1060,7 @@ static struct skinny_device *build_device(char *cat, struct ast_variable *v) nat = ast_true(v->value); } else if (!strcasecmp(v->name, "callerid")) { if (!strcasecmp(v->value, "asreceived")) { - strcpy(callerid, ""); + callerid[0] = '\0'; } else { strncpy(callerid, v->value, sizeof(callerid) - 1); } @@ -1208,7 +1208,7 @@ static int skinny_register(skinny_req *req, struct skinnysession *s) s->device = d; d->type = req->data.reg.type; if (ast_strlen_zero(d->version_id)) { - strncpy(d->version_id, version_id, sizeof(d->version_id)); + strncpy(d->version_id, version_id, sizeof(d->version_id) - 1); } d->registered = 1; d->session = s; @@ -1276,7 +1276,7 @@ static void *skinny_ss(void *data) if (!res || !ast_matchmore_extension(chan, chan->context, exten, 1, l->callerid)) { if (getforward) { /* Record this as the forwarding extension */ - strncpy(l->call_forward, exten, sizeof(l->call_forward)); + strncpy(l->call_forward, exten, sizeof(l->call_forward) - 1); if (option_verbose > 2) { ast_verbose(VERBOSE_PREFIX_3 "Setting call forward to '%s' on channel %s\n", l->call_forward, chan->name); @@ -1792,7 +1792,7 @@ static struct ast_channel *skinny_new(struct skinny_subchannel *sub, int state) ast_update_use_count(); tmp->callgroup = l->callgroup; tmp->pickupgroup = l->pickupgroup; - strncpy(tmp->call_forward, l->call_forward, sizeof(tmp->call_forward)); + strncpy(tmp->call_forward, l->call_forward, sizeof(tmp->call_forward) - 1); strncpy(tmp->context, l->context, sizeof(tmp->context)-1); strncpy(tmp->exten,l->exten, sizeof(tmp->exten)-1); if (!ast_strlen_zero(l->callerid)) { @@ -1858,7 +1858,7 @@ static int handle_message(skinny_req *req, struct skinnysession *s) memset(req, 0, sizeof(skinny_req)); req->len = sizeof(register_rej_message)+4; req->e = REGISTER_REJ_MESSAGE; - sprintf(req->data.regrej.errMsg, "No Authority: %s", name); + snprintf(req->data.regrej.errMsg, sizeof(req->data.regrej.errMsg), "No Authority: %s", name); transmit_response(s, req); break; } @@ -1868,10 +1868,12 @@ static int handle_message(skinny_req *req, struct skinnysession *s) memset(req, 0, SKINNY_MAX_PACKET); req->len = sizeof(register_ack_message)+4; req->e = REGISTER_ACK_MESSAGE; - strcpy(req->data.regack.res, "0"); + req->data.regack.res[0] = '0'; + req->data.regack.res[1] = '\0'; req->data.regack.keepAlive = keep_alive; - strcpy(req->data.regack.dateTemplate, date_format); - strcpy(req->data.regack.res2, "0"); + strncpy(req->data.regack.dateTemplate, date_format, sizeof(req->data.regack.dateTemplate) - 1); + req->data.regack.res2[0] = '0'; + req->data.regack.res2[1] = '\0'; req->data.regack.secondaryKeepAlive = keep_alive; transmit_response(s, req); if (skinnydebug) { @@ -1953,7 +1955,7 @@ static int handle_message(skinny_req *req, struct skinnysession *s) memset(req, 0, SKINNY_MAX_PACKET); req->len = sizeof(version_res_message)+4; req->e = VERSION_RES_MESSAGE; - sprintf(req->data.version.version, s->device->version_id); + snprintf(req->data.version.version, sizeof(req->data.version.version), s->device->version_id); transmit_response(s, req); break; case SERVER_REQUEST_MESSAGE: @@ -2045,8 +2047,8 @@ static int handle_message(skinny_req *req, struct skinnysession *s) #if 0 /* XXX Do this right XXX */ req->data.speeddialreq.speedDialNumber = speedDialNum; - sprintf(req->data.speeddial.speedDialDirNumber, "31337"); - sprintf(req->data.speeddial.speedDialDisplayName, "Asterisk Rules!"); + snprintf(req->data.speeddial.speedDialDirNumber, sizeof(req->data.speeddial.speedDialDirNumber), "31337"); + snprintf(req->data.speeddial.speedDialDisplayName, sizeof(req->data.speeddial.speedDialDisplayName),"Asterisk Rules!"); #endif transmit_response(s, req); break; @@ -2177,11 +2179,21 @@ static int handle_message(skinny_req *req, struct skinnysession *s) } f.frametype = AST_FRAME_DTMF; if (digit == 14) { - sprintf(&d, "*"); + d = '*'; } else if (digit == 15) { - sprintf(&d, "#"); + d = '#'; + } else if (digit >=0 && digit <= 9) { + d = '0' + digit; } else { - sprintf(&d, "%d", digit); + /* digit=10-13 (A,B,C,D ?), or + * digit is bad value + * + * probably should not end up here, but set + * value for backward compatibility, and log + * a warning. + */ + d = '0' + digit; + ast_log(LOG_WARNING, "Unsupported digit %d\n", digit); } f.subclass = d; f.src = "skinny"; |