diff -urN asterisk-1.2.20.orig/apps/app_dial.c asterisk-1.2.20/apps/app_dial.c --- asterisk-1.2.20.orig/apps/app_dial.c 2007-06-21 04:25:54.000000000 +0900 +++ asterisk-1.2.20/apps/app_dial.c 2007-07-03 15:09:46.556793536 +0900 @@ -1682,7 +1682,7 @@ static int retrydial_exec(struct ast_channel *chan, void *data) { - char *announce = NULL, *context = NULL, *dialdata = NULL; + char *announce = NULL, *context = NULL, *dialdata = NULL, *endptr = NULL; int sleep = 0, loops = 0, res = 0; struct localuser *u; struct ast_flags peerflags; @@ -1716,7 +1716,8 @@ if ((dialdata = strchr(dialdata, '|'))) { *dialdata = '\0'; dialdata++; - if (!(loops = atoi(dialdata))) { + loops = strtol(dialdata, &endptr, 10); + if (errno == EINVAL || errno == ERANGE || dialdata == endptr) { ast_log(LOG_ERROR, "%s requires the numerical argument \n",rapp); LOCAL_USER_REMOVE(u); return -1;