diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c index c967ca8344..88d6e42015 100644 --- a/channels/chan_skinny.c +++ b/channels/chan_skinny.c @@ -6141,7 +6141,8 @@ static int handle_message(struct skinny_req *req, struct skinnysession *s) struct skinny_speeddial *sd; struct skinny_line *l; struct skinny_device *d = s->device; - + size_t len; + if ((!s->device) && (letohl(req->e) != REGISTER_MESSAGE && letohl(req->e) != ALARM_MESSAGE)) { ast_log(LOG_WARNING, "Client sent message #%d without first registering.\n", req->e); ast_free(req); @@ -6206,8 +6207,13 @@ static int handle_message(struct skinny_req *req, struct skinnysession *s) ast_log(LOG_WARNING, "Unsupported digit %d\n", digit); } - d->exten[strlen(d->exten)] = dgt; - d->exten[strlen(d->exten)+1] = '\0'; + len = strlen(d->exten); + if (len < sizeof(d->exten) - 1) { + d->exten[len] = dgt; + d->exten[len + 1] = '\0'; + } else { + ast_log(AST_LOG_WARNING, "Dropping digit with value %d because digit queue is full\n", dgt); + } } else res = handle_keypad_button_message(req, s); }