*************** *** 2308,2314 **** len = strlen(d->exten); while (len < AST_MAX_EXTENSION-1) { - res = 1; /* Assume we will get a digit */ while (strlen(d->exten) == len) { ast_safe_sleep(c, loop_pause); --- 2331,2336 ---- len = strlen(d->exten); while (len < AST_MAX_EXTENSION-1) { res = 1; /* Assume we will get a digit */ while (strlen(d->exten) == len) { ast_safe_sleep(c, loop_pause); *************** *** 2358,2363 **** } } else if (res == 0) { ast_log(LOG_DEBUG, "Not enough digits (and no ambiguous match)...\n"); transmit_tone(s, SKINNY_REORDER); if (sub->owner && sub->owner->_state != AST_STATE_UP) { ast_indicate(c, -1); --- 2380,2386 ---- } } else if (res == 0) { ast_log(LOG_DEBUG, "Not enough digits (and no ambiguous match)...\n"); + memset(d->exten, 0, sizeof(d->exten)); transmit_tone(s, SKINNY_REORDER); if (sub->owner && sub->owner->_state != AST_STATE_UP) { ast_indicate(c, -1); *************** *** 2367,2372 **** } else if (!ast_canmatch_extension(c, c->context, d->exten, 1, c->cid.cid_num) && ((d->exten[0] != '*') || (!ast_strlen_zero(d->exten) > 2))) { ast_log(LOG_WARNING, "Can't match [%s] from '%s' in context %s\n", d->exten, c->cid.cid_num ? c->cid.cid_num : "", c->context); transmit_tone(s, SKINNY_REORDER); /* hang out for 3 seconds to let congestion play */ ast_safe_sleep(c, 3000); --- 2390,2396 ---- } else if (!ast_canmatch_extension(c, c->context, d->exten, 1, c->cid.cid_num) && ((d->exten[0] != '*') || (!ast_strlen_zero(d->exten) > 2))) { ast_log(LOG_WARNING, "Can't match [%s] from '%s' in context %s\n", d->exten, c->cid.cid_num ? c->cid.cid_num : "", c->context); + memset(d->exten, 0, sizeof(d->exten)); transmit_tone(s, SKINNY_REORDER); /* hang out for 3 seconds to let congestion play */ ast_safe_sleep(c, 3000); *************** *** 2382,2387 **** if (c) ast_hangup(c); return NULL; } --- 2406,2412 ---- if (c) ast_hangup(c); + memset(d->exten, 0, sizeof(d->exten)); return NULL; }