Index: pbx/pbx_config.c =================================================================== --- pbx/pbx_config.c (revision 211568) +++ pbx/pbx_config.c (revision 211569) @@ -947,7 +947,7 @@ if (!strcmp(prior, "hint")) { iprior = PRIORITY_HINT; } else { - if (sscanf(prior, "%d", &iprior) != 1) { + if (sscanf(prior, "%30d", &iprior) != 1) { ast_cli(a->fd, "'%s' is not a valid priority\n", prior); prior = NULL; } @@ -1438,7 +1438,7 @@ ipri = lastpri; else ast_log(LOG_WARNING, "Can't use 'same' priority on the first entry!\n"); - } else if (sscanf(pri, "%d", &ipri) != 1 && + } else if (sscanf(pri, "%30d", &ipri) != 1 && (ipri = ast_findlabel_extension2(NULL, con, realext, pri, cidmatch)) < 1) { ast_log(LOG_WARNING, "Invalid priority/label '%s' at line %d\n", pri, v->lineno); ipri = 0; @@ -1566,9 +1566,9 @@ c = dahdicopy; chan = strsep(&c, ","); while (chan) { - if (sscanf(chan, "%d-%d", &start, &finish) == 2) { + if (sscanf(chan, "%30d-%30d", &start, &finish) == 2) { /* Range */ - } else if (sscanf(chan, "%d", &start)) { + } else if (sscanf(chan, "%30d", &start)) { /* Just one */ finish = start; } else { Index: pbx/pbx_loopback.c =================================================================== --- pbx/pbx_loopback.c (revision 211568) +++ pbx/pbx_loopback.c (revision 211569) @@ -120,7 +120,7 @@ if (!ast_strlen_zero(con)) *newcontext = con; if (!ast_strlen_zero(pri)) - sscanf(pri, "%d", priority); + sscanf(pri, "%30d", priority); } static int loopback_exists(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data) Index: pbx/pbx_spool.c =================================================================== --- pbx/pbx_spool.c (revision 211568) +++ pbx/pbx_spool.c (revision 211569) @@ -171,7 +171,7 @@ } else if (!strcasecmp(buf, "data")) { ast_copy_string(o->data, c, sizeof(o->data)); } else if (!strcasecmp(buf, "maxretries")) { - if (sscanf(c, "%d", &o->maxretries) != 1) { + if (sscanf(c, "%30d", &o->maxretries) != 1) { ast_log(LOG_WARNING, "Invalid max retries at line %d of %s\n", lineno, fn); o->maxretries = 0; } @@ -182,24 +182,24 @@ } else if (!strcasecmp(buf, "extension")) { ast_copy_string(o->exten, c, sizeof(o->exten)); } else if (!strcasecmp(buf, "priority")) { - if ((sscanf(c, "%d", &o->priority) != 1) || (o->priority < 1)) { + if ((sscanf(c, "%30d", &o->priority) != 1) || (o->priority < 1)) { ast_log(LOG_WARNING, "Invalid priority at line %d of %s\n", lineno, fn); o->priority = 1; } } else if (!strcasecmp(buf, "retrytime")) { - if ((sscanf(c, "%d", &o->retrytime) != 1) || (o->retrytime < 1)) { + if ((sscanf(c, "%30d", &o->retrytime) != 1) || (o->retrytime < 1)) { ast_log(LOG_WARNING, "Invalid retrytime at line %d of %s\n", lineno, fn); o->retrytime = 300; } } else if (!strcasecmp(buf, "waittime")) { - if ((sscanf(c, "%d", &o->waittime) != 1) || (o->waittime < 1)) { + if ((sscanf(c, "%30d", &o->waittime) != 1) || (o->waittime < 1)) { ast_log(LOG_WARNING, "Invalid waittime at line %d of %s\n", lineno, fn); o->waittime = 45; } } else if (!strcasecmp(buf, "retry")) { o->retries++; } else if (!strcasecmp(buf, "startretry")) { - if (sscanf(c, "%ld", &o->callingpid) != 1) { + if (sscanf(c, "%30ld", &o->callingpid) != 1) { ast_log(LOG_WARNING, "Unable to retrieve calling PID!\n"); o->callingpid = 0; } Index: pbx/pbx_dundi.c =================================================================== --- pbx/pbx_dundi.c (revision 211568) +++ pbx/pbx_dundi.c (revision 211569) @@ -475,7 +475,7 @@ buf[0] = 0; if (map->weightstr) { pbx_substitute_variables_helper(NULL, map->weightstr, buf, sizeof(buf) - 1); - if (sscanf(buf, "%d", &map->_weight) != 1) + if (sscanf(buf, "%30d", &map->_weight) != 1) map->_weight = MAX_WEIGHT; } @@ -1088,7 +1088,7 @@ if (expiration > 0) { ast_debug(1, "Found cache expiring in %d seconds!\n", expiration); ptr += length + 1; - while((sscanf(ptr, "%d/%d/%d/%n", &(flags.flags), &weight, &tech, &length) == 3)) { + while((sscanf(ptr, "%30d/%30d/%30d/%n", &(flags.flags), &weight, &tech, &length) == 3)) { ptr += length; term = strchr(ptr, '|'); if (term) { @@ -4088,7 +4088,7 @@ goto finish; } - if (sscanf(args.resultnum, "%u", &num) != 1) { + if (sscanf(args.resultnum, "%30u", &num) != 1) { ast_log(LOG_ERROR, "Invalid value '%s' for resultnum to DUNDIRESULT!\n", args.resultnum); goto finish; @@ -4252,7 +4252,7 @@ } else if (x >= 4) { ast_copy_string(map->dcontext, name, sizeof(map->dcontext)); ast_copy_string(map->lcontext, fields[0], sizeof(map->lcontext)); - if ((sscanf(fields[1], "%d", &map->_weight) == 1) && (map->_weight >= 0) && (map->_weight <= MAX_WEIGHT)) { + if ((sscanf(fields[1], "%30d", &map->_weight) == 1) && (map->_weight >= 0) && (map->_weight <= MAX_WEIGHT)) { ast_copy_string(map->dest, fields[3], sizeof(map->dest)); if ((map->tech = str2tech(fields[2]))) map->dead = 0; @@ -4354,7 +4354,7 @@ if (c) { *c = '\0'; c++; - if (sscanf(c, "%d:%d", &port, &expire) == 2) { + if (sscanf(c, "%5d:%30d", &port, &expire) == 2) { /* Got it! */ inet_aton(data, &peer->addr.sin_addr); peer->addr.sin_family = AF_INET; @@ -4451,7 +4451,7 @@ peer->maxms = 0; } else if (!strcasecmp(v->value, "yes")) { peer->maxms = DEFAULT_MAXMS; - } else if (sscanf(v->value, "%d", &peer->maxms) != 1) { + } else if (sscanf(v->value, "%30d", &peer->maxms) != 1) { ast_log(LOG_WARNING, "Qualification of peer '%s' should be 'yes', 'no', or a number of milliseconds at line %d of dundi.conf\n", ast_eid_to_str(eid_str, sizeof(eid_str), &peer->eid), v->lineno); peer->maxms = 0; @@ -4690,14 +4690,14 @@ } else if (!strcasecmp(v->name, "authdebug")) { authdebug = ast_true(v->value); } else if (!strcasecmp(v->name, "ttl")) { - if ((sscanf(v->value, "%d", &x) == 1) && (x > 0) && (x < DUNDI_DEFAULT_TTL)) { + if ((sscanf(v->value, "%30d", &x) == 1) && (x > 0) && (x < DUNDI_DEFAULT_TTL)) { dundi_ttl = x; } else { ast_log(LOG_WARNING, "'%s' is not a valid TTL at line %d, must be number from 1 to %d\n", v->value, v->lineno, DUNDI_DEFAULT_TTL); } } else if (!strcasecmp(v->name, "autokill")) { - if (sscanf(v->value, "%d", &x) == 1) { + if (sscanf(v->value, "%30d", &x) == 1) { if (x >= 0) global_autokilltimeout = x; else @@ -4732,7 +4732,7 @@ } else if (!strcasecmp(v->name, "storehistory")) { global_storehistory = ast_true(v->value); } else if (!strcasecmp(v->name, "cachetime")) { - if ((sscanf(v->value, "%d", &x) == 1)) { + if ((sscanf(v->value, "%30d", &x) == 1)) { dundi_cache_time = x; } else { ast_log(LOG_WARNING, "'%s' is not a valid cache time at line %d. Using default value '%d'.\n", Index: pbx/dundi-parser.c =================================================================== --- pbx/dundi-parser.c (revision 211568) +++ pbx/dundi-parser.c (revision 211569) @@ -70,7 +70,7 @@ int x; if (sscanf(s, "%2x%2x%2x%2x%2x%2x", &eid_int[0], &eid_int[1], &eid_int[2], &eid_int[3], &eid_int[4], &eid_int[5]) != 6) - return -1; + return -1; for (x = 0; x < 6; x++) eid->eid[x] = eid_int[x]; return 0; Index: channels/misdn_config.c =================================================================== --- channels/misdn_config.c (revision 211568) +++ channels/misdn_config.c (revision 211569) @@ -889,9 +889,9 @@ int res; if (strchr(value,'x')) { - res = sscanf(value, "%x", &tmp); + res = sscanf(value, "%30x", &tmp); } else { - res = sscanf(value, "%d", &tmp); + res = sscanf(value, "%30d", &tmp); } if (res) { dest->num = ast_malloc(sizeof(int)); @@ -906,7 +906,7 @@ break; case MISDN_CTYPE_BOOLINT: dest->num = ast_malloc(sizeof(int)); - if (sscanf(value, "%d", &tmp)) { + if (sscanf(value, "%30d", &tmp)) { memcpy(dest->num, &tmp, sizeof(int)); } else { *(dest->num) = (ast_true(value) ? boolint_def : 0); @@ -975,7 +975,7 @@ for (token = strsep(&tmp, ","); token; token = strsep(&tmp, ","), *ptpbuf = 0) { if (!*token) continue; - if (sscanf(token, "%d-%d%s", &start, &end, ptpbuf) >= 2) { + if (sscanf(token, "%30d-%30d%511s", &start, &end, ptpbuf) >= 2) { for (; start <= end; start++) { if (start <= max_ports && start > 0) { cfg_for_ports[start] = 1; @@ -984,7 +984,7 @@ CLI_ERROR(v->name, v->value, cat); } } else { - if (sscanf(token, "%d%s", &start, ptpbuf)) { + if (sscanf(token, "%30d%511s", &start, ptpbuf)) { if (start <= max_ports && start > 0) { cfg_for_ports[start] = 1; ptp[start] = (strstr(ptpbuf, "ptp")) ? 1 : 0; Index: channels/chan_usbradio.c =================================================================== --- channels/chan_usbradio.c (revision 211568) +++ channels/chan_usbradio.c (revision 211569) @@ -358,8 +358,8 @@ #define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif -static char *config = "usbradio.conf"; /* default config file */ -static char *config1 = "usbradio_tune_%s.conf"; /* tune config file */ +static const char *config = "usbradio.conf"; /* default config file */ +#define config1 "usbradio_tune_%s.conf" /* tune config file */ static FILE *frxcapraw = NULL, *frxcaptrace = NULL, *frxoutraw = NULL; static FILE *ftxcapraw = NULL, *ftxcaptrace = NULL, *ftxoutraw = NULL; @@ -2818,27 +2818,27 @@ static void store_rxgain(struct chan_usbradio_pvt *o, char *s) { float f; - sscanf(s,"%f",&f); - o->rxgain = f; - //ast_log(LOG_WARNING, "set rxgain = %f\n", f); + if (sscanf(s, "%30f", &f) == 1) + o->rxgain = f; + ast_debug(4, "set rxgain = %f\n", f); } /* */ static void store_rxvoiceadj(struct chan_usbradio_pvt *o, char *s) { float f; - sscanf(s,"%f",&f); - o->rxvoiceadj = f; - //ast_log(LOG_WARNING, "set rxvoiceadj = %f\n", f); + if (sscanf(s, "%30f", &f) == 1) + o->rxvoiceadj = f; + ast_debug(4, "set rxvoiceadj = %f\n", f); } /* */ static void store_rxctcssadj(struct chan_usbradio_pvt *o, char *s) { float f; - sscanf(s,"%f",&f); - o->rxctcssadj = f; - //ast_log(LOG_WARNING, "set rxctcssadj = %f\n", f); + if (sscanf(s, "%30f", &f) == 1) + o->rxctcssadj = f; + ast_debug(4, "set rxctcssadj = %f\n", f); } /* */ Index: channels/chan_dahdi.c =================================================================== --- channels/chan_dahdi.c (revision 211568) +++ channels/chan_dahdi.c (revision 211569) @@ -8676,7 +8676,7 @@ unsigned int code1, code2, code3; int numvals; - numvals = sscanf(pcstring, "%d-%d-%d", &code1, &code2, &code3); + numvals = sscanf(pcstring, "%30d-%30d-%30d", &code1, &code2, &code3); if (numvals == 1) return code1; if (numvals == 3) @@ -9506,7 +9506,7 @@ stringp = dest + 1; s = strsep(&stringp, "/"); - if ((res = sscanf(s, "%d%c%d", &x, &opt, &y)) < 1) { + if ((res = sscanf(s, "%30d%1c%30d", &x, &opt, &y)) < 1) { ast_log(LOG_WARNING, "Unable to determine group for data %s\n", (char *)data); return NULL; } @@ -9542,7 +9542,7 @@ channelmatch = x; } #ifdef HAVE_PRI - else if ((res = sscanf(s, "%d:%d%c%d", &trunkgroup, &crv, &opt, &y)) > 1) { + else if ((res = sscanf(s, "%30d:%30d%1c%30d", &trunkgroup, &crv, &opt, &y)) > 1) { if ((trunkgroup < 1) || (crv < 1)) { ast_log(LOG_WARNING, "Unable to determine trunk group and CRV for data %s\n", (char *)data); return NULL; @@ -9564,8 +9564,8 @@ channelmatch = crv; p = pris[x].crvs; } -#endif - else if ((res = sscanf(s, "%d%c%d", &x, &opt, &y)) < 1) { +#endif + else if ((res = sscanf(s, "%30d%1c%30d", &x, &opt, &y)) < 1) { ast_log(LOG_WARNING, "Unable to determine channel for data %s\n", (char *)data); return NULL; } else { @@ -12809,7 +12809,7 @@ return CLI_SHOWUSAGE; #ifdef HAVE_PRI if ((c = strchr(a->argv[3], ':'))) { - if (sscanf(a->argv[3], "%d:%d", &trunkgroup, &channel) != 2) + if (sscanf(a->argv[3], "%30d:%30d", &trunkgroup, &channel) != 2) return CLI_SHOWUSAGE; if ((trunkgroup < 1) || (channel < 1)) return CLI_SHOWUSAGE; @@ -14109,7 +14109,7 @@ #ifdef HAVE_PRI pri = NULL; if (iscrv) { - if (sscanf(c, "%d:%n", &trunkgroup, &y) != 1) { + if (sscanf(c, "%30d:%n", &trunkgroup, &y) != 1) { ast_log(LOG_WARNING, "CRV must begin with trunkgroup followed by a colon at line %d.\n", lineno); return -1; } @@ -14132,9 +14132,9 @@ #endif while ((chan = strsep(&c, ","))) { - if (sscanf(chan, "%d-%d", &start, &finish) == 2) { + if (sscanf(chan, "%30d-%30d", &start, &finish) == 2) { /* Range */ - } else if (sscanf(chan, "%d", &start)) { + } else if (sscanf(chan, "%30d", &start)) { /* Just one */ finish = start; } else if (!strcasecmp(chan, "pseudo")) { @@ -14223,7 +14223,7 @@ strcpy(confp->chan.echocancel.params[confp->chan.echocancel.head.param_count].name, param.name); if (param.value) { - if (sscanf(param.value, "%d", &confp->chan.echocancel.params[confp->chan.echocancel.head.param_count].value) != 1) { + if (sscanf(param.value, "%30d", &confp->chan.echocancel.params[confp->chan.echocancel.head.param_count].value) != 1) { ast_log(LOG_WARNING, "Invalid echocancel parameter value supplied at line %d: '%s'\n", line, param.value); continue; } @@ -14272,7 +14272,7 @@ int res; char policy[21] = ""; - res = sscanf(v->value, "%d,%20s", &confp->chan.buf_no, policy); + res = sscanf(v->value, "%30d,%20s", &confp->chan.buf_no, policy); if (res != 2) { ast_log(LOG_WARNING, "Parsing buffers option data failed, using defaults.\n"); confp->chan.buf_no = numbufs; @@ -14306,11 +14306,11 @@ } else if (!strcasecmp(v->name, "dring3range")) { confp->chan.drings.ringnum[2].range = atoi(v->value); } else if (!strcasecmp(v->name, "dring1")) { - sscanf(v->value, "%d,%d,%d", &confp->chan.drings.ringnum[0].ring[0], &confp->chan.drings.ringnum[0].ring[1], &confp->chan.drings.ringnum[0].ring[2]); + sscanf(v->value, "%30d,%30d,%30d", &confp->chan.drings.ringnum[0].ring[0], &confp->chan.drings.ringnum[0].ring[1], &confp->chan.drings.ringnum[0].ring[2]); } else if (!strcasecmp(v->name, "dring2")) { - sscanf(v->value,"%d,%d,%d", &confp->chan.drings.ringnum[1].ring[0], &confp->chan.drings.ringnum[1].ring[1], &confp->chan.drings.ringnum[1].ring[2]); + sscanf(v->value, "%30d,%30d,%30d", &confp->chan.drings.ringnum[1].ring[0], &confp->chan.drings.ringnum[1].ring[1], &confp->chan.drings.ringnum[1].ring[2]); } else if (!strcasecmp(v->name, "dring3")) { - sscanf(v->value, "%d,%d,%d", &confp->chan.drings.ringnum[2].ring[0], &confp->chan.drings.ringnum[2].ring[1], &confp->chan.drings.ringnum[2].ring[2]); + sscanf(v->value, "%30d,%30d,%30d", &confp->chan.drings.ringnum[2].ring[0], &confp->chan.drings.ringnum[2].ring[1], &confp->chan.drings.ringnum[2].ring[2]); } else if (!strcasecmp(v->name, "usecallerid")) { confp->chan.use_callerid = ast_true(v->value); } else if (!strcasecmp(v->name, "cidsignalling")) { @@ -14367,7 +14367,7 @@ } else if (!strcasecmp(v->name, "busycount")) { confp->chan.busycount = atoi(v->value); } else if (!strcasecmp(v->name, "busypattern")) { - if (sscanf(v->value, "%d,%d", &confp->chan.busy_tonelength, &confp->chan.busy_quietlength) != 2) { + if (sscanf(v->value, "%30d,%30d", &confp->chan.busy_tonelength, &confp->chan.busy_quietlength) != 2) { ast_log(LOG_ERROR, "busypattern= expects busypattern=tonelength,quietlength at line %d.\n", v->lineno); } } else if (!strcasecmp(v->name, "callprogress")) { @@ -14385,7 +14385,7 @@ } else if (!strcasecmp(v->name, "echocancel")) { process_echocancel(confp, v->value, v->lineno); } else if (!strcasecmp(v->name, "echotraining")) { - if (sscanf(v->value, "%d", &y) == 1) { + if (sscanf(v->value, "%30d", &y) == 1) { if ((y < 10) || (y > 4000)) { ast_log(LOG_WARNING, "Echo training time must be within the range of 10 to 4000 ms at line %d.\n", v->lineno); } else { @@ -14469,19 +14469,19 @@ confp->chan.mwimonitor_fsk = 1; } } else if (!strcasecmp(v->name, "cid_rxgain")) { - if (sscanf(v->value, "%f", &confp->chan.cid_rxgain) != 1) { + if (sscanf(v->value, "%30f", &confp->chan.cid_rxgain) != 1) { ast_log(LOG_WARNING, "Invalid cid_rxgain: %s at line %d.\n", v->value, v->lineno); } } else if (!strcasecmp(v->name, "rxgain")) { - if (sscanf(v->value, "%f", &confp->chan.rxgain) != 1) { + if (sscanf(v->value, "%30f", &confp->chan.rxgain) != 1) { ast_log(LOG_WARNING, "Invalid rxgain: %s at line %d.\n", v->value, v->lineno); } } else if (!strcasecmp(v->name, "txgain")) { - if (sscanf(v->value, "%f", &confp->chan.txgain) != 1) { + if (sscanf(v->value, "%30f", &confp->chan.txgain) != 1) { ast_log(LOG_WARNING, "Invalid txgain: %s at line %d.\n", v->value, v->lineno); } } else if (!strcasecmp(v->name, "tonezone")) { - if (sscanf(v->value, "%d", &confp->chan.tonezone) != 1) { + if (sscanf(v->value, "%30d", &confp->chan.tonezone) != 1) { ast_log(LOG_WARNING, "Invalid tonezone: %s at line %d.\n", v->value, v->lineno); } } else if (!strcasecmp(v->name, "callerid")) { @@ -14936,7 +14936,7 @@ ast_copy_string(original_args, v->value, sizeof(original_args)); /* 16 cadences allowed (8 pairs) */ - element_count = sscanf(v->value, "%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d", &c[0], &c[1], &c[2], &c[3], &c[4], &c[5], &c[6], &c[7], &c[8], &c[9], &c[10], &c[11], &c[12], &c[13], &c[14], &c[15]); + element_count = sscanf(v->value, "%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d,%30d", &c[0], &c[1], &c[2], &c[3], &c[4], &c[5], &c[6], &c[7], &c[8], &c[9], &c[10], &c[11], &c[12], &c[13], &c[14], &c[15]); /* Cadence must be even (on/off) */ if (element_count % 2 == 1) { Index: channels/chan_phone.c =================================================================== --- channels/chan_phone.c (revision 211568) +++ channels/chan_phone.c (revision 211569) @@ -1259,7 +1259,7 @@ float gain; /* try to scan number */ - if (sscanf(value, "%f", &gain) != 1) + if (sscanf(value, "%30f", &gain) != 1) { ast_log(LOG_ERROR, "Invalid %s value '%s' in '%s' config\n", value, gain_type, config); Index: channels/chan_sip.c =================================================================== --- channels/chan_sip.c (revision 211568) +++ channels/chan_sip.c (revision 211569) @@ -2423,7 +2423,7 @@ } copy_request(&reqcpy, &req); parse_request(&reqcpy); - if (sscanf(get_header(&reqcpy, "Content-Length"), "%d", &cl)) { + if (sscanf(get_header(&reqcpy, "Content-Length"), "%30d", &cl)) { while (cl > 0) { ast_mutex_lock(&tcptls_session->lock); if (!fread(buf, (cl < sizeof(buf)) ? cl : sizeof(buf), 1, tcptls_session->f)) { @@ -3232,7 +3232,7 @@ p->packets = pkt; /* Add it to the queue */ if (resp) { /* Parse out the response code */ - if (sscanf(ast_str_buffer(pkt->data), "SIP/2.0 %d", &respid) == 1) { + if (sscanf(ast_str_buffer(pkt->data), "SIP/2.0 %30d", &respid) == 1) { pkt->response_code = respid; } } @@ -3283,10 +3283,10 @@ /* If there are packets still waiting for delivery, delay the destruction */ if (p->packets) { if (!p->needdestroy) { - char method_str[30]; + char method_str[31]; ast_debug(3, "Re-scheduled destruction of SIP call %s\n", p->callid ? p->callid : ""); append_history(p, "ReliableXmit", "timeout"); - if (sscanf(p->lastmsg, "Tx: %s", method_str) == 1 || sscanf(p->lastmsg, "Rx: %s", method_str) == 1) { + if (sscanf(p->lastmsg, "Tx: %30s", method_str) == 1 || sscanf(p->lastmsg, "Rx: %30s", method_str) == 1) { if (method_match(SIP_CANCEL, method_str) || method_match(SIP_BYE, method_str)) { p->needdestroy = 1; } @@ -4563,7 +4563,7 @@ /* This address should be updated using dnsmgr */ memcpy(&dialog->sa.sin_addr, &sin->sin_addr, sizeof(dialog->sa.sin_addr)); if (!sin->sin_port) { - if (ast_strlen_zero(port) || sscanf(port, "%u", &portno) != 1) { + if (ast_strlen_zero(port) || sscanf(port, "%5u", &portno) != 1) { portno = (dialog->socket.type & SIP_TRANSPORT_TLS) ? STANDARD_TLS_PORT : STANDARD_SIP_PORT; } @@ -6903,7 +6903,7 @@ content_length = get_header(req, "Content-Length"); if (!ast_strlen_zero(content_length)) { - if (sscanf(content_length, "%ud", &x) != 1) { + if (sscanf(content_length, "%30u", &x) != 1) { ast_log(LOG_WARNING, "Invalid Content-Length: %s\n", content_length); return 0; } @@ -7008,10 +7008,10 @@ } /* We only want the m and c lines for audio */ for (m = get_sdp_iterate(&miterator, req, "m"); !ast_strlen_zero(m); m = get_sdp_iterate(&miterator, req, "m")) { - if ((media == SDP_AUDIO && ((sscanf(m, "audio %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || - (sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1 && len > 0))) || - (media == SDP_VIDEO && ((sscanf(m, "video %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || - (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1 && len > 0)))) { + if ((media == SDP_AUDIO && ((sscanf(m, "audio %30d/%30d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || + (sscanf(m, "audio %30d RTP/AVP %n", &x, &len) == 1 && len > 0))) || + (media == SDP_VIDEO && ((sscanf(m, "video %30d/%30d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || + (sscanf(m, "video %30d RTP/AVP %n", &x, &len) == 1 && len > 0)))) { /* See if there's a c= line for this media stream. * XXX There is no guarantee that we'll be grabbing the c= line for this * particular media stream here. However, this is the same logic used in process_sdp. @@ -7171,7 +7171,7 @@ ast_log(LOG_WARNING, "SDP sytax error in o= line\n"); return -1; } - if (!sscanf(token, "%" SCNd64, &rua_version)) { + if (!sscanf(token, "%30" SCNd64, &rua_version)) { ast_log(LOG_WARNING, "SDP sytax error in o= line version\n"); return -1; } @@ -7255,8 +7255,8 @@ numberofports = 1; len = -1; - if ((sscanf(m, "audio %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || - (sscanf(m, "audio %d RTP/AVP %n", &x, &len) == 1 && len > 0)) { + if ((sscanf(m, "audio %30d/%30d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || + (sscanf(m, "audio %30d RTP/AVP %n", &x, &len) == 1 && len > 0)) { audio = TRUE; p->offered_media[SDP_AUDIO].offered = TRUE; numberofmediastreams++; @@ -7266,7 +7266,7 @@ codecs = m + len; ast_copy_string(p->offered_media[SDP_AUDIO].text, codecs, sizeof(p->offered_media[SDP_AUDIO].text)); for (; !ast_strlen_zero(codecs); codecs = ast_skip_blanks(codecs + len)) { - if (sscanf(codecs, "%d%n", &codec, &len) != 1) { + if (sscanf(codecs, "%30d%n", &codec, &len) != 1) { ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs); return -1; } @@ -7274,8 +7274,8 @@ ast_verbose("Found RTP audio format %d\n", codec); ast_rtp_set_m_type(newaudiortp, codec); } - } else if ((sscanf(m, "video %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || - (sscanf(m, "video %d RTP/AVP %n", &x, &len) == 1 && len >= 0)) { + } else if ((sscanf(m, "video %30d/%30d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || + (sscanf(m, "video %30d RTP/AVP %n", &x, &len) == 1 && len >= 0)) { video = TRUE; p->novideo = FALSE; p->offered_media[SDP_VIDEO].offered = TRUE; @@ -7285,7 +7285,7 @@ codecs = m + len; ast_copy_string(p->offered_media[SDP_VIDEO].text, codecs, sizeof(p->offered_media[SDP_VIDEO].text)); for (; !ast_strlen_zero(codecs); codecs = ast_skip_blanks(codecs + len)) { - if (sscanf(codecs, "%d%n", &codec, &len) != 1) { + if (sscanf(codecs, "%30d%n", &codec, &len) != 1) { ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs); return -1; } @@ -7293,8 +7293,8 @@ ast_verbose("Found RTP video format %d\n", codec); ast_rtp_set_m_type(newvideortp, codec); } - } else if ((sscanf(m, "text %d/%d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || - (sscanf(m, "text %d RTP/AVP %n", &x, &len) == 1 && len > 0)) { + } else if ((sscanf(m, "text %30d/%30d RTP/AVP %n", &x, &numberofports, &len) == 2 && len > 0) || + (sscanf(m, "text %30d RTP/AVP %n", &x, &len) == 1 && len > 0)) { text = TRUE; p->offered_media[SDP_TEXT].offered = TRUE; p->notext = FALSE; @@ -7304,7 +7304,7 @@ codecs = m + len; ast_copy_string(p->offered_media[SDP_TEXT].text, codecs, sizeof(p->offered_media[SDP_TEXT].text)); for (; !ast_strlen_zero(codecs); codecs = ast_skip_blanks(codecs + len)) { - if (sscanf(codecs, "%d%n", &codec, &len) != 1) { + if (sscanf(codecs, "%30d%n", &codec, &len) != 1) { ast_log(LOG_WARNING, "Error in codec string '%s'\n", codecs); return -1; } @@ -7312,8 +7312,8 @@ ast_verbose("Found RTP text format %d\n", codec); ast_rtp_set_m_type(newtextrtp, codec); } - } else if (p->udptl && ( (sscanf(m, "image %d udptl t38%n", &x, &len) == 1 && len > 0) || - (sscanf(m, "image %d UDPTL t38%n", &x, &len) == 1 && len > 0) )) { + } else if (p->udptl && ( (sscanf(m, "image %30d udptl t38%n", &x, &len) == 1 && len > 0) || + (sscanf(m, "image %30d UDPTL t38%n", &x, &len) == 1 && len > 0) )) { if (debug) ast_verbose("Got T.38 offer in SDP in dialog %s\n", p->callid); p->offered_media[SDP_IMAGE].offered = TRUE; @@ -7501,21 +7501,21 @@ ast_rtp_codec_setpref(p->rtp, pref); } continue; - + } else if (!strncmp(a, red_fmtp, strlen(red_fmtp))) { /* count numbers of generations in fmtp */ red_cp = &red_fmtp[strlen(red_fmtp)]; strncpy(red_fmtp, a, 100); - sscanf(red_cp, "%u", &red_data_pt[red_num_gen]); + sscanf(red_cp, "%30u", &red_data_pt[red_num_gen]); red_cp = strtok(red_cp, "/"); while (red_cp && red_num_gen++ < RED_MAX_GENERATION) { - sscanf(red_cp, "%u", &red_data_pt[red_num_gen]); + sscanf(red_cp, "%30u", &red_data_pt[red_num_gen]); red_cp = strtok(NULL, "/"); } red_cp = red_fmtp; - } else if (sscanf(a, "rtpmap: %u %127[^/]/", &codec, mimeSubtype) == 2) { + } else if (sscanf(a, "rtpmap: %30u %127[^/]/", &codec, mimeSubtype) == 2) { /* We have a rtpmap to handle */ if (last_rtpmap_codec < SDP_MAX_RTPMAP_CODECS) { @@ -7577,10 +7577,10 @@ /* Scan trough the a= lines for T38 attributes and set apropriate fileds */ iterator = req->sdp_start; while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') { - if ((sscanf(a, "T38FaxMaxBuffer:%d", &x) == 1)) { + if ((sscanf(a, "T38FaxMaxBuffer:%30d", &x) == 1)) { found = 1; ast_debug(3, "MaxBufferSize:%d\n", x); - } else if ((sscanf(a, "T38MaxBitRate:%d", &x) == 1) || (sscanf(a, "T38FaxMaxRate:%d", &x) == 1)) { + } else if ((sscanf(a, "T38MaxBitRate:%30d", &x) == 1) || (sscanf(a, "T38FaxMaxRate:%30d", &x) == 1)) { found = 1; ast_debug(3, "T38MaxBitRate: %d\n", x); switch (x) { @@ -7603,17 +7603,17 @@ p->t38.their_parms.rate = AST_T38_RATE_2400; break; } - } else if ((sscanf(a, "T38FaxVersion:%d", &x) == 1)) { + } else if ((sscanf(a, "T38FaxVersion:%30d", &x) == 1)) { found = 1; ast_debug(3, "FaxVersion: %d\n", x); p->t38.their_parms.version = x; - } else if ((sscanf(a, "T38FaxMaxDatagram:%d", &x) == 1) || (sscanf(a, "T38MaxDatagram:%d", &x) == 1)) { + } else if ((sscanf(a, "T38FaxMaxDatagram:%30d", &x) == 1) || (sscanf(a, "T38MaxDatagram:%30d", &x) == 1)) { found = 1; ast_debug(3, "FaxMaxDatagram: %d\n", x); ast_udptl_set_far_max_datagram(p->udptl, x); } else if ((strncmp(a, "T38FaxFillBitRemoval", 20) == 0)) { found = 1; - if (sscanf(a, "T38FaxFillBitRemoval:%d", &x) == 1) { + if (sscanf(a, "T38FaxFillBitRemoval:%30d", &x) == 1) { ast_debug(3, "FillBitRemoval: %d\n", x); if (x == 1) { p->t38.their_parms.fill_bit_removal = TRUE; @@ -7624,7 +7624,7 @@ } } else if ((strncmp(a, "T38FaxTranscodingMMR", 20) == 0)) { found = 1; - if (sscanf(a, "T38FaxTranscodingMMR:%d", &x) == 1) { + if (sscanf(a, "T38FaxTranscodingMMR:%30d", &x) == 1) { ast_debug(3, "Transcoding MMR: %d\n", x); if (x == 1) { p->t38.their_parms.transcoding_mmr = TRUE; @@ -7635,7 +7635,7 @@ } } else if ((strncmp(a, "T38FaxTranscodingJBIG", 21) == 0)) { found = 1; - if (sscanf(a, "T38FaxTranscodingJBIG:%d", &x) == 1) { + if (sscanf(a, "T38FaxTranscodingJBIG:%30d", &x) == 1) { ast_debug(3, "Transcoding JBIG: %d\n", x); if (x == 1) { p->t38.their_parms.transcoding_jbig = TRUE; @@ -8383,7 +8383,7 @@ struct sip_request resp; int seqno = 0; - if (reliable && (sscanf(get_header(req, "CSeq"), "%d ", &seqno) != 1)) { + if (reliable && (sscanf(get_header(req, "CSeq"), "%30d ", &seqno) != 1)) { ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq")); return -1; } @@ -8551,7 +8551,7 @@ char tmp[512]; int seqno = 0; - if (reliable && (sscanf(get_header(req, "CSeq"), "%d ", &seqno) != 1)) { + if (reliable && (sscanf(get_header(req, "CSeq"), "%30d ", &seqno) != 1)) { ast_log(LOG_WARNING, "Unable to determine sequence number from '%s'\n", get_header(req, "CSeq")); return -1; } @@ -9176,7 +9176,7 @@ struct sip_request resp; int seqno; - if (sscanf(get_header(req, "CSeq"), "%d ", &seqno) != 1) { + if (sscanf(get_header(req, "CSeq"), "%30d ", &seqno) != 1) { ast_log(LOG_WARNING, "Unable to get seqno from '%s'\n", get_header(req, "CSeq")); return -1; } @@ -9221,7 +9221,7 @@ { struct sip_request resp; int seqno; - if (sscanf(get_header(req, "CSeq"), "%d ", &seqno) != 1) { + if (sscanf(get_header(req, "CSeq"), "%30d ", &seqno) != 1) { ast_log(LOG_WARNING, "Unable to get seqno from '%s'\n", get_header(req, "CSeq")); return -1; } @@ -10873,7 +10873,7 @@ char *s = strcasestr(contact, ";expires="); if (s) { expires = strsep(&s, ";"); /* trim ; and beyond */ - if (sscanf(expires + 9, "%d", &expire) != 1) + if (sscanf(expires + 9, "%30d", &expire) != 1) expire = default_expiry; } else { /* Nothing has been specified */ @@ -15803,7 +15803,7 @@ if (!args.number) { number = 1; } else { - sscanf(args.number, "%d", &number); + sscanf(args.number, "%30d", &number); if (number < 1) number = 1; } @@ -16721,7 +16721,7 @@ } tmptmp = strcasestr(contact, "expires="); if (tmptmp) { - if (sscanf(tmptmp + 8, "%d;", &expires) != 1) + if (sscanf(tmptmp + 8, "%30d;", &expires) != 1) expires = 0; } @@ -19997,7 +19997,7 @@ ast_log(LOG_ERROR, "Missing Cseq. Dropping this SIP message, it's incomplete.\n"); error = 1; } - if (!error && sscanf(cseq, "%d%n", &seqno, &len) != 1) { + if (!error && sscanf(cseq, "%30d%n", &seqno, &len) != 1) { ast_log(LOG_ERROR, "No seqno in '%s'. Dropping incomplete message.\n", cmd); error = 1; } @@ -20027,7 +20027,7 @@ if (ast_strlen_zero(e)) { return 0; } - if (sscanf(e, "%d %n", &respid, &len) != 1) { + if (sscanf(e, "%30d %n", &respid, &len) != 1) { ast_log(LOG_WARNING, "Invalid response: '%s'\n", e); return 0; } @@ -20579,7 +20579,7 @@ if ((port = strrchr(line, ':'))) { *port++ = '\0'; - if (!sscanf(port, "%u", portnum)) { + if (!sscanf(port, "%5u", portnum)) { ast_log(LOG_NOTICE, "'%s' is not a valid port number on line %d of sip.conf. using default.\n", port, lineno); port = NULL; } @@ -20991,7 +20991,7 @@ *p_interval = 0; p_hdrval = ast_skip_blanks(p_hdrval); - if (!sscanf(p_hdrval, "%d", p_interval)) { + if (!sscanf(p_hdrval, "%30d", p_interval)) { ast_log(LOG_WARNING, "Parsing of Min-SE header failed %s\n", p_hdrval); return -1; } @@ -21021,7 +21021,7 @@ while ((p_token = strsep(&p_se_hdr, ";"))) { p_token = ast_skip_blanks(p_token); - if (!sscanf(p_token, "%d", p_interval)) { + if (!sscanf(p_token, "%30d", p_interval)) { ast_log(LOG_WARNING, "Parsing of Session-Expires failed\n"); return -1; } @@ -22085,7 +22085,7 @@ } else if (realtime && !strcasecmp(v->name, "regseconds")) { ast_get_time_t(v->value, ®seconds, 0, NULL); } else if (realtime && !strcasecmp(v->name, "lastms")) { - sscanf(v->value, "%d", &peer->lastms); + sscanf(v->value, "%30d", &peer->lastms); } else if (realtime && !strcasecmp(v->name, "ipaddr") && !ast_strlen_zero(v->value) ) { inet_aton(v->value, &(peer->addr.sin_addr)); } else if (realtime && !strcasecmp(v->name, "name")) @@ -22276,22 +22276,22 @@ } else if (!strcasecmp(v->name, "autoframing")) { peer->autoframing = ast_true(v->value); } else if (!strcasecmp(v->name, "rtptimeout")) { - if ((sscanf(v->value, "%d", &peer->rtptimeout) != 1) || (peer->rtptimeout < 0)) { + if ((sscanf(v->value, "%30d", &peer->rtptimeout) != 1) || (peer->rtptimeout < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); peer->rtptimeout = global_rtptimeout; } } else if (!strcasecmp(v->name, "rtpholdtimeout")) { - if ((sscanf(v->value, "%d", &peer->rtpholdtimeout) != 1) || (peer->rtpholdtimeout < 0)) { + if ((sscanf(v->value, "%30d", &peer->rtpholdtimeout) != 1) || (peer->rtpholdtimeout < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); peer->rtpholdtimeout = global_rtpholdtimeout; } } else if (!strcasecmp(v->name, "rtpkeepalive")) { - if ((sscanf(v->value, "%d", &peer->rtpkeepalive) != 1) || (peer->rtpkeepalive < 0)) { + if ((sscanf(v->value, "%30d", &peer->rtpkeepalive) != 1) || (peer->rtpkeepalive < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP keepalive time at line %d. Using default.\n", v->value, v->lineno); peer->rtpkeepalive = global_rtpkeepalive; } } else if (!strcasecmp(v->name, "timert1")) { - if ((sscanf(v->value, "%d", &peer->timer_t1) != 1) || (peer->timer_t1 < 0)) { + if ((sscanf(v->value, "%30d", &peer->timer_t1) != 1) || (peer->timer_t1 < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid T1 time at line %d. Using default.\n", v->value, v->lineno); peer->timer_t1 = global_t1; } @@ -22301,7 +22301,7 @@ peer->timer_b = peer->timer_t1 * 64; } } else if (!strcasecmp(v->name, "timerb")) { - if ((sscanf(v->value, "%d", &peer->timer_b) != 1) || (peer->timer_b < 0)) { + if ((sscanf(v->value, "%30d", &peer->timer_b) != 1) || (peer->timer_b < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid Timer B time at line %d. Using default.\n", v->value, v->lineno); peer->timer_b = global_timer_b; } @@ -22318,7 +22318,7 @@ peer->maxms = 0; } else if (!strcasecmp(v->value, "yes")) { peer->maxms = default_qualify ? default_qualify : DEFAULT_MAXMS; - } else if (sscanf(v->value, "%d", &peer->maxms) != 1) { + } else if (sscanf(v->value, "%30d", &peer->maxms) != 1) { ast_log(LOG_WARNING, "Qualification of peer '%s' should be 'yes', 'no', or a number of milliseconds at line %d of sip.conf\n", peer->name, v->lineno); peer->maxms = 0; } @@ -22332,7 +22332,7 @@ } } else if (!strcasecmp(v->name, "qualifyfreq")) { int i; - if (sscanf(v->value, "%d", &i) == 1) + if (sscanf(v->value, "%30d", &i) == 1) peer->qualifyfreq = i * 1000; else { ast_log(LOG_WARNING, "Invalid qualifyfreq number '%s' at line %d of %s\n", v->value, v->lineno, config); @@ -22351,12 +22351,12 @@ peer->stimer.st_mode_oper = i; } } else if (!strcasecmp(v->name, "session-expires")) { - if (sscanf(v->value, "%d", &peer->stimer.st_max_se) != 1) { + if (sscanf(v->value, "%30d", &peer->stimer.st_max_se) != 1) { ast_log(LOG_WARNING, "Invalid session-expires '%s' at line %d of %s\n", v->value, v->lineno, config); peer->stimer.st_max_se = global_max_se; } } else if (!strcasecmp(v->name, "session-minse")) { - if (sscanf(v->value, "%d", &peer->stimer.st_min_se) != 1) { + if (sscanf(v->value, "%30d", &peer->stimer.st_min_se) != 1) { ast_log(LOG_WARNING, "Invalid session-minse '%s' at line %d of %s\n", v->value, v->lineno, config); peer->stimer.st_min_se = global_min_se; } @@ -22808,17 +22808,17 @@ } else if (!strcasecmp(v->name, "vmexten")) { ast_copy_string(default_vmexten, v->value, sizeof(default_vmexten)); } else if (!strcasecmp(v->name, "rtptimeout")) { - if ((sscanf(v->value, "%d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { + if ((sscanf(v->value, "%30d", &global_rtptimeout) != 1) || (global_rtptimeout < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); global_rtptimeout = 0; } } else if (!strcasecmp(v->name, "rtpholdtimeout")) { - if ((sscanf(v->value, "%d", &global_rtpholdtimeout) != 1) || (global_rtpholdtimeout < 0)) { + if ((sscanf(v->value, "%30d", &global_rtpholdtimeout) != 1) || (global_rtpholdtimeout < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP hold time at line %d. Using default.\n", v->value, v->lineno); global_rtpholdtimeout = 0; } } else if (!strcasecmp(v->name, "rtpkeepalive")) { - if ((sscanf(v->value, "%d", &global_rtpkeepalive) != 1) || (global_rtpkeepalive < 0)) { + if ((sscanf(v->value, "%30d", &global_rtpkeepalive) != 1) || (global_rtpkeepalive < 0)) { ast_log(LOG_WARNING, "'%s' is not a valid RTP keepalive time at line %d. Using default.\n", v->value, v->lineno); global_rtpkeepalive = 0; } @@ -22954,7 +22954,7 @@ if (!externip.sin_port) externip.sin_port = bindaddr.sin_port; } else if (!strcasecmp(v->name, "externrefresh")) { - if (sscanf(v->value, "%d", &externrefresh) != 1) { + if (sscanf(v->value, "%30d", &externrefresh) != 1) { ast_log(LOG_WARNING, "Invalid externrefresh value '%s', must be an integer >0 at line %d\n", v->value, v->lineno); externrefresh = 10; } @@ -23014,28 +23014,28 @@ ast_log(LOG_WARNING, "Invalid cos_text value at line %d, refer to QoS documentation\n", v->lineno); } else if (!strcasecmp(v->name, "bindport")) { int i; - if (sscanf(v->value, "%d", &i) == 1) { + if (sscanf(v->value, "%5d", &i) == 1) { bindaddr.sin_port = htons(i); } else { ast_log(LOG_WARNING, "Invalid port number '%s' at line %d of %s\n", v->value, v->lineno, config); } } else if (!strcasecmp(v->name, "hash_user")) { int i; - if (sscanf(v->value, "%d", &i) == 1 && i > 2) { + if (sscanf(v->value, "%30d", &i) == 1 && i > 2) { hash_user_size = i; } else { ast_log(LOG_WARNING, "Invalid hash_user size '%s' at line %d of %s -- should be much larger than 2\n", v->value, v->lineno, config); } } else if (!strcasecmp(v->name, "hash_peer")) { int i; - if (sscanf(v->value, "%d", &i) == 1 && i > 2) { + if (sscanf(v->value, "%30d", &i) == 1 && i > 2) { hash_peer_size = i; } else { ast_log(LOG_WARNING, "Invalid hash_peer size '%s' at line %d of %s -- should be much larger than 2\n", v->value, v->lineno, config); } } else if (!strcasecmp(v->name, "hash_dialog")) { int i; - if (sscanf(v->value, "%d", &i) == 1 && i > 2) { + if (sscanf(v->value, "%30d", &i) == 1 && i > 2) { hash_dialog_size = i; } else { ast_log(LOG_WARNING, "Invalid hash_dialog size '%s' at line %d of %s -- should be much larger than 2\n", v->value, v->lineno, config); @@ -23045,13 +23045,13 @@ default_qualify = 0; } else if (!strcasecmp(v->value, "yes")) { default_qualify = DEFAULT_MAXMS; - } else if (sscanf(v->value, "%d", &default_qualify) != 1) { + } else if (sscanf(v->value, "%30d", &default_qualify) != 1) { ast_log(LOG_WARNING, "Qualification default should be 'yes', 'no', or a number of milliseconds at line %d of sip.conf\n", v->lineno); default_qualify = 0; } } else if (!strcasecmp(v->name, "qualifyfreq")) { int i; - if (sscanf(v->value, "%d", &i) == 1) + if (sscanf(v->value, "%30d", &i) == 1) global_qualifyfreq = i * 1000; else { ast_log(LOG_WARNING, "Invalid qualifyfreq number '%s' at line %d of %s\n", v->value, v->lineno, config); @@ -23076,12 +23076,12 @@ global_st_mode = i; } } else if (!strcasecmp(v->name, "session-expires")) { - if (sscanf(v->value, "%d", &global_max_se) != 1) { + if (sscanf(v->value, "%30d", &global_max_se) != 1) { ast_log(LOG_WARNING, "Invalid session-expires '%s' at line %d of %s\n", v->value, v->lineno, config); global_max_se = DEFAULT_MAX_SE; } } else if (!strcasecmp(v->name, "session-minse")) { - if (sscanf(v->value, "%d", &global_min_se) != 1) { + if (sscanf(v->value, "%30d", &global_min_se) != 1) { ast_log(LOG_WARNING, "Invalid session-minse '%s' at line %d of %s\n", v->value, v->lineno, config); global_min_se = DEFAULT_MIN_SE; } @@ -23662,7 +23662,7 @@ memset(lport, 0, sizeof(lport)); localtmp++; /* This is okey because lhost and lport are as big as tmp */ - sscanf(localtmp, "%[^<>:; ]:%[^<>:; ]", lhost, lport); + sscanf(localtmp, "%80[^<>:; ]:%80[^<>:; ]", lhost, lport); if (ast_strlen_zero(lhost)) { ast_log(LOG_ERROR, "Can't find the host address\n"); return 0; Index: channels/chan_agent.c =================================================================== --- channels/chan_agent.c (revision 211568) +++ channels/chan_agent.c (revision 211569) @@ -1354,9 +1354,9 @@ struct timeval now; s = data; - if ((s[0] == '@') && (sscanf(s + 1, "%d", &groupoff) == 1)) { + if ((s[0] == '@') && (sscanf(s + 1, "%30d", &groupoff) == 1)) { groupmatch = (1 << groupoff); - } else if ((s[0] == ':') && (sscanf(s + 1, "%d", &groupoff) == 1)) { + } else if ((s[0] == ':') && (sscanf(s + 1, "%30d", &groupoff) == 1)) { groupmatch = (1 << groupoff); waitforagent = 1; } else @@ -2337,9 +2337,9 @@ int res = AST_DEVICE_INVALID; s = data; - if ((s[0] == '@') && (sscanf(s + 1, "%d", &groupoff) == 1)) + if ((s[0] == '@') && (sscanf(s + 1, "%30d", &groupoff) == 1)) groupmatch = (1 << groupoff); - else if ((s[0] == ':') && (sscanf(s + 1, "%d", &groupoff) == 1)) { + else if ((s[0] == ':') && (sscanf(s + 1, "%30d", &groupoff) == 1)) { groupmatch = (1 << groupoff); } else groupmatch = 0; Index: channels/iax2-provision.c =================================================================== --- channels/iax2-provision.c (revision 211568) +++ channels/iax2-provision.c (revision 211569) @@ -261,7 +261,7 @@ ast_mutex_lock(&provlock); ast_db_get("iax/provisioning/cache", template, tmp, sizeof(tmp)); - if (sscanf(tmp, "v%x", version) != 1) { + if (sscanf(tmp, "v%30x", version) != 1) { if (strcmp(tmp, "u")) { ret = iax_provision_build(&ied, version, template, force); if (ret) @@ -319,7 +319,7 @@ v = ast_variable_browse(cfg, s); while(v) { if (!strcasecmp(v->name, "port") || !strcasecmp(v->name, "serverport")) { - if ((sscanf(v->value, "%d", &x) == 1) && (x > 0) && (x < 65535)) { + if ((sscanf(v->value, "%5d", &x) == 1) && (x > 0) && (x < 65535)) { if (!strcasecmp(v->name, "port")) { cur->port = x; foundportno = 1; Index: channels/chan_iax2.c =================================================================== --- channels/chan_iax2.c (revision 211568) +++ channels/chan_iax2.c (revision 211569) @@ -10840,18 +10840,18 @@ peer->maxms = 0; } else if (!strcasecmp(v->value, "yes")) { peer->maxms = DEFAULT_MAXMS; - } else if (sscanf(v->value, "%d", &peer->maxms) != 1) { + } else if (sscanf(v->value, "%30d", &peer->maxms) != 1) { ast_log(LOG_WARNING, "Qualification of peer '%s' should be 'yes', 'no', or a number of milliseconds at line %d of iax.conf\n", peer->name, v->lineno); peer->maxms = 0; } } else if (!strcasecmp(v->name, "qualifysmoothing")) { peer->smoothing = ast_true(v->value); } else if (!strcasecmp(v->name, "qualifyfreqok")) { - if (sscanf(v->value, "%d", &peer->pokefreqok) != 1) { + if (sscanf(v->value, "%30d", &peer->pokefreqok) != 1) { ast_log(LOG_WARNING, "Qualification testing frequency of peer '%s' when OK should a number of milliseconds at line %d of iax.conf\n", peer->name, v->lineno); } } else if (!strcasecmp(v->name, "qualifyfreqnotok")) { - if (sscanf(v->value, "%d", &peer->pokefreqnotok) != 1) { + if (sscanf(v->value, "%30d", &peer->pokefreqnotok) != 1) { ast_log(LOG_WARNING, "Qualification testing frequency of peer '%s' when NOT OK should be a number of milliseconds at line %d of iax.conf\n", peer->name, v->lineno); } else ast_log(LOG_WARNING, "Set peer->pokefreqnotok to %d\n", peer->pokefreqnotok); } else if (!strcasecmp(v->name, "timezone")) { @@ -11427,7 +11427,7 @@ if (trunkmaxsize == 0) trunkmaxsize = MAX_TRUNKDATA; } else if (!strcasecmp(v->name, "autokill")) { - if (sscanf(v->value, "%d", &x) == 1) { + if (sscanf(v->value, "%30d", &x) == 1) { if (x >= 0) autokill = x; else Index: channels/chan_oss.c =================================================================== --- channels/chan_oss.c (revision 211568) +++ channels/chan_oss.c (revision 211569) @@ -1239,7 +1239,7 @@ static void store_boost(struct chan_oss_pvt *o, const char *s) { double boost = 0; - if (sscanf(s, "%lf", &boost) != 1) { + if (sscanf(s, "%30lf", &boost) != 1) { ast_log(LOG_WARNING, "invalid boost <%s>\n", s); return; } Index: channels/chan_misdn.c =================================================================== --- channels/chan_misdn.c (revision 211568) +++ channels/chan_misdn.c (revision 211569) @@ -1220,7 +1220,7 @@ ok = 1; } return ok ? CLI_SUCCESS : CLI_SHOWUSAGE; - } else if (!sscanf(a->argv[3], "%d", &onlyport) || onlyport < 0) { + } else if (!sscanf(a->argv[3], "%5d", &onlyport) || onlyport < 0) { ast_cli(a->fd, "Unknown option: %s\n", a->argv[3]); return CLI_SHOWUSAGE; } Index: channels/chan_skinny.c =================================================================== --- channels/chan_skinny.c (revision 211568) +++ channels/chan_skinny.c (revision 211569) @@ -6252,7 +6252,7 @@ } else if (!strcasecmp(v->name, "disallow")) { ast_parse_allow_disallow(&default_prefs, &default_capability, v->value, 0); } else if (!strcasecmp(v->name, "bindport")) { - if (sscanf(v->value, "%d", &ourport) == 1) { + if (sscanf(v->value, "%5d", &ourport) == 1) { bindaddr.sin_port = htons(ourport); } else { ast_log(LOG_WARNING, "Invalid bindport '%s' at line %d of %s\n", v->value, v->lineno, config); Index: channels/chan_mgcp.c =================================================================== --- channels/chan_mgcp.c (revision 211568) +++ channels/chan_mgcp.c (revision 211569) @@ -1893,7 +1893,7 @@ ast_log(LOG_WARNING, "Unable to lookup host in c= line, '%s'\n", c); return -1; } - if (sscanf(m, "audio %d RTP/AVP %n", &portno, &len) != 1) { + if (sscanf(m, "audio %30d RTP/AVP %n", &portno, &len) != 1) { ast_log(LOG_WARNING, "Unable to determine port number for RTP in '%s'\n", m); return -1; } @@ -1908,7 +1908,7 @@ ast_rtp_pt_clear(sub->rtp); codecs = ast_strdupa(m + len); while (!ast_strlen_zero(codecs)) { - if (sscanf(codecs, "%d%n", &codec, &len) != 1) { + if (sscanf(codecs, "%30d%n", &codec, &len) != 1) { if (codec_count) break; ast_log(LOG_WARNING, "Error in codec string '%s' at '%s'\n", m, codecs); @@ -1924,7 +1924,7 @@ sdpLineNum_iterator_init(&iterator); while ((a = get_sdp_iterate(&iterator, req, "a"))[0] != '\0') { char* mimeSubtype = ast_strdupa(a); /* ensures we have enough space */ - if (sscanf(a, "rtpmap: %u %[^/]/", &codec, mimeSubtype) != 2) + if (sscanf(a, "rtpmap: %30u %127[^/]/", &codec, mimeSubtype) != 2) continue; /* Note: should really look at the 'freq' and '#chans' params too */ ast_rtp_set_rtpmap_type(sub->rtp, codec, "audio", mimeSubtype, 0); @@ -2057,7 +2057,7 @@ mgr = ast_calloc(1, sizeof(*mgr) + resp.len + 1); if (mgr) { /* Store MGCP response in case we have to retransmit */ - sscanf(req->identifier, "%d", &mgr->seqno); + sscanf(req->identifier, "%30d", &mgr->seqno); time(&mgr->whensent); mgr->len = resp.len; memcpy(mgr->buf, resp.data, resp.len); @@ -3290,7 +3290,7 @@ time_t now; struct mgcp_response *prev = NULL, *cur, *next, *answer=NULL; time(&now); - if (sscanf(req->identifier, "%d", &seqno) != 1) + if (sscanf(req->identifier, "%30d", &seqno) != 1) seqno = 0; cur = sub->parent->parent->responses; while(cur) { @@ -3348,7 +3348,7 @@ return 1; } - if (sscanf(req.verb, "%d", &result) && sscanf(req.identifier, "%d", &ident)) { + if (sscanf(req.verb, "%30d", &result) && sscanf(req.identifier, "%30d", &ident)) { /* Try to find who this message is for, if it's important */ sub = find_subchannel_and_lock(NULL, ident, &sin); if (sub) { @@ -4169,7 +4169,7 @@ if (ast_str2cos(v->value, &qos.cos_audio)) ast_log(LOG_WARNING, "Invalid cos_audio value at line %d, refer to QoS documentation\n", v->lineno); } else if (!strcasecmp(v->name, "port")) { - if (sscanf(v->value, "%d", &ourport) == 1) { + if (sscanf(v->value, "%5d", &ourport) == 1) { bindaddr.sin_port = htons(ourport); } else { ast_log(LOG_WARNING, "Invalid port number '%s' at line %d of %s\n", v->value, v->lineno, config); Index: agi/eagi-test.c =================================================================== --- agi/eagi-test.c (revision 211568) +++ agi/eagi-test.c (revision 211569) @@ -156,7 +156,7 @@ } tmp = getenv("agi_enhanced"); if (tmp) { - if (sscanf(tmp, "%d.%d", &ver, &subver) != 2) + if (sscanf(tmp, "%30d.%30d", &ver, &subver) != 2) ver = 0; } if (ver < 1) { Index: agi/eagi-sphinx-test.c =================================================================== --- agi/eagi-sphinx-test.c (revision 211568) +++ agi/eagi-sphinx-test.c (revision 211569) @@ -223,7 +223,7 @@ connect_sphinx(); tmp = getenv("agi_enhanced"); if (tmp) { - if (sscanf(tmp, "%d.%d", &ver, &subver) != 2) + if (sscanf(tmp, "%30d.%30d", &ver, &subver) != 2) ver = 0; } if (ver < 1) { Index: apps/app_stack.c =================================================================== --- apps/app_stack.c (revision 211568) +++ apps/app_stack.c (revision 211569) @@ -420,7 +420,7 @@ ast_debug(1, "Gosub called with %d arguments: 0:%s 1:%s 2:%s 3:%s 4:%s\n", argc, argv[0], argv[1], argv[2], argv[3], argc == 5 ? argv[4] : ""); - if (sscanf(argv[3], "%d", &priority) != 1 || priority < 1) { + if (sscanf(argv[3], "%30d", &priority) != 1 || priority < 1) { /* Lookup the priority label */ if ((priority = ast_findlabel_extension(chan, argv[1], argv[2], argv[3], chan->cid.cid_num)) < 0) { ast_log(LOG_ERROR, "Priority '%s' not found in '%s@%s'\n", argv[3], argv[2], argv[1]); Index: apps/app_chanspy.c =================================================================== --- apps/app_chanspy.c (revision 211568) +++ apps/app_chanspy.c (revision 211569) @@ -937,7 +937,7 @@ if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) { int vol; - if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &vol) != 1) || (vol > 4) || (vol < -4)) + if ((sscanf(opts[OPT_ARG_VOLUME], "%30d", &vol) != 1) || (vol > 4) || (vol < -4)) ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n"); else volfactor = vol; @@ -1036,7 +1036,7 @@ if (ast_test_flag(&flags, OPTION_VOLUME) && opts[OPT_ARG_VOLUME]) { int vol; - if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &vol) != 1) || (vol > 4) || (vol < -4)) + if ((sscanf(opts[OPT_ARG_VOLUME], "%30d", &vol) != 1) || (vol > 4) || (vol < -4)) ast_log(LOG_NOTICE, "Volume factor must be a number between -4 and 4\n"); else volfactor = vol; Index: apps/app_adsiprog.c =================================================================== --- apps/app_adsiprog.c (revision 211568) +++ apps/app_adsiprog.c (revision 211569) @@ -187,7 +187,7 @@ if (!(argtype & ARG_NUMBER)) return -1; /* Octal value */ - if (sscanf(src, "%o", (int *)out) != 1) + if (sscanf(src, "%30o", (int *)out) != 1) return -1; if (argtype & ARG_STRING) { /* Convert */ @@ -197,7 +197,7 @@ if (!(argtype & ARG_NUMBER)) return -1; /* Hex value */ - if (sscanf(src + 2, "%x", (unsigned int *)out) != 1) + if (sscanf(src + 2, "%30x", (unsigned int *)out) != 1) return -1; if (argtype & ARG_STRING) { /* Convert */ @@ -207,7 +207,7 @@ if (!(argtype & ARG_NUMBER)) return -1; /* Hex value */ - if (sscanf(src, "%d", (int *)out) != 1) + if (sscanf(src, "%30d", (int *)out) != 1) return -1; if (argtype & ARG_STRING) { /* Convert */ Index: apps/app_alarmreceiver.c =================================================================== --- apps/app_alarmreceiver.c (revision 211568) +++ apps/app_alarmreceiver.c (revision 211569) @@ -115,7 +115,7 @@ return; } - sscanf(value, "%u", &v); + sscanf(value, "%30u", &v); v++; ast_verb(4, "AlarmReceiver: New value for %s: %u\n", key, v); Index: apps/app_talkdetect.c =================================================================== --- apps/app_talkdetect.c (revision 211568) +++ apps/app_talkdetect.c (revision 211569) @@ -87,16 +87,16 @@ tmp = ast_strdupa(data); AST_STANDARD_APP_ARGS(args, tmp); - if (!ast_strlen_zero(args.silence) && (sscanf(args.silence, "%d", &x) == 1) && (x > 0)) { + if (!ast_strlen_zero(args.silence) && (sscanf(args.silence, "%30d", &x) == 1) && (x > 0)) { sil = x; } - if (!ast_strlen_zero(args.min) && (sscanf(args.min, "%d", &x) == 1) && (x > 0)) { + if (!ast_strlen_zero(args.min) && (sscanf(args.min, "%30d", &x) == 1) && (x > 0)) { min = x; } - if (!ast_strlen_zero(args.max) && (sscanf(args.max, "%d", &x) == 1) && (x > 0)) { + if (!ast_strlen_zero(args.max) && (sscanf(args.max, "%30d", &x) == 1) && (x > 0)) { max = x; } - if (!ast_strlen_zero(args.analysistime) && (sscanf(args.analysistime, "%d", &x) == 1) && (x > 0)) { + if (!ast_strlen_zero(args.analysistime) && (sscanf(args.analysistime, "%30d", &x) == 1) && (x > 0)) { analysistime = x; } Index: apps/app_setcallerid.c =================================================================== --- apps/app_setcallerid.c (revision 211568) +++ apps/app_setcallerid.c (revision 211569) @@ -70,7 +70,7 @@ } /* For interface consistency, permit the argument to be specified as a number */ - if (sscanf(data, "%d", &pres) != 1 || pres < 0 || pres > 255 || (pres & 0x9c)) { + if (sscanf(data, "%30d", &pres) != 1 || pres < 0 || pres > 255 || (pres & 0x9c)) { pres = ast_parse_caller_presentation(data); } Index: apps/app_rpt.c =================================================================== --- apps/app_rpt.c (revision 211568) +++ apps/app_rpt.c (revision 211569) @@ -2101,7 +2101,8 @@ if (str == NULL) return -1; /* leave this %i alone, non-base-10 input is useful here */ - if (sscanf(str,"%i",&ret) != 1) return -1; + if (sscanf(str, "%30i", &ret) != 1) + return -1; return ret; } @@ -2325,7 +2326,7 @@ /* do not use atoi() here, we need to be able to have the input specified in hex or decimal so we use sscanf with a %i */ - if ((!val) || (sscanf(val,"%i",&rpt_vars[n].p.iobase) != 1)) + if ((!val) || (sscanf(val, "%30i", &rpt_vars[n].p.iobase) != 1)) rpt_vars[n].p.iobase = DEFAULT_IOBASE; val = (char *) ast_variable_retrieve(cfg,this,"ioport"); rpt_vars[n].p.ioport = val; @@ -3640,7 +3641,7 @@ tonesubset = strsep(&stringp,")"); if(!tonesubset) break; - if(sscanf(tonesubset,"(%d,%d,%d,%d", &f1, &f2, &duration, &litude) != 4) + if(sscanf(tonesubset,"(%30d,%30d,%30d,%30d", &f1, &f2, &duration, &litude) != 4) break; res = play_tone_pair(chan, f1, f2, duration, amplitude); if(res) @@ -5065,7 +5066,7 @@ p = strstr(tdesc, "version"); if(!p) break; - if(sscanf(p, "version %d.%d", &vmajor, &vminor) != 2) + if(sscanf(p, "version %30d.%30d", &vmajor, &vminor) != 2) break; wait_interval(myrpt, DLY_TELEM, mychannel); /* Wait a little bit */ /* Say "version" */ @@ -6673,10 +6674,12 @@ static void handle_link_data(struct rpt *myrpt, struct rpt_link *mylink, char *str) { -char tmp[512],tmp1[512],cmd[300] = "",dest[300],src[300],c; -int i,seq, res, ts; -struct rpt_link *l; -struct ast_frame wf; + /* XXX ATTENTION: if you change the size of these arrays you MUST + * change the limits in corresponding sscanf() calls below. */ + char tmp[512], tmp1[512], cmd[300] = "", dest[300], src[300], c; + int i,seq, res, ts; + struct rpt_link *l; + struct ast_frame wf; wf.frametype = AST_FRAME_TEXT; wf.subclass = 0; @@ -6711,7 +6714,7 @@ } if (tmp[0] == 'K') { - if (sscanf(tmp,"%s %s %s %d %d",cmd,dest,src,&seq,&ts) != 5) + if (sscanf(tmp,"%299s %299s %299s %30d %30d",cmd,dest,src,&seq,&ts) != 5) { ast_log(LOG_WARNING, "Unable to parse keying string %s\n",str); return; @@ -6819,7 +6822,7 @@ } if (tmp[0] == 'I') { - if (sscanf(tmp,"%s %s %x",cmd,src,&seq) != 3) + if (sscanf(tmp, "%299s %299s %30x", cmd, src, &seq) != 3) { ast_log(LOG_WARNING, "Unable to parse ident string %s\n",str); return; @@ -6829,7 +6832,7 @@ } else { - if (sscanf(tmp,"%s %s %s %d %c",cmd,dest,src,&seq,&c) != 5) + if (sscanf(tmp, "%299s %299s %299s %30d %1c", cmd, dest, src, &seq, &c) != 5) { ast_log(LOG_WARNING, "Unable to parse link string %s\n",str); return; @@ -10224,8 +10227,10 @@ static int handle_remote_data(struct rpt *myrpt, char *str) { -char tmp[300],cmd[300],dest[300],src[300],c; -int seq,res; + /* XXX ATTENTION: if you change the size of these arrays you MUST + * change the limits in corresponding sscanf() calls below. */ + char tmp[300], cmd[300], dest[300], src[300], c; + int seq,res; /* put string in our buffer */ strncpy(tmp,str,sizeof(tmp) - 1); @@ -10248,7 +10253,9 @@ return 0; } #endif - if (sscanf(tmp,"%s %s %s %d %c",cmd,dest,src,&seq,&c) != 5) + /* XXX WARNING: be very careful with the limits on the folowing + * sscanf() call, make sure they match the values defined above */ + if (sscanf(tmp, "%299s %299s %299s %30d %1c", cmd, dest, src, &seq, &c) != 5) { ast_log(LOG_WARNING, "Unable to parse link string %s\n",str); return 0; @@ -11879,7 +11886,7 @@ p = strstr(tdesc, "version"); if(p){ int vmajor,vminor; - if(sscanf(p, "version %d.%d", &vmajor, &vminor) == 2) + if(sscanf(p, "version %30d.%30d", &vmajor, &vminor) == 2) sprintf(str + strlen(str),"&apprptvers=%d.%d",vmajor,vminor); } time(&now); Index: apps/app_mixmonitor.c =================================================================== --- apps/app_mixmonitor.c (revision 211568) +++ apps/app_mixmonitor.c (revision 211569) @@ -426,7 +426,7 @@ if (ast_test_flag(&flags, MUXFLAG_READVOLUME)) { if (ast_strlen_zero(opts[OPT_ARG_READVOLUME])) { ast_log(LOG_WARNING, "No volume level was provided for the heard volume ('v') option.\n"); - } else if ((sscanf(opts[OPT_ARG_READVOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) { + } else if ((sscanf(opts[OPT_ARG_READVOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) { ast_log(LOG_NOTICE, "Heard volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_READVOLUME]); } else { readvol = get_volfactor(x); @@ -436,7 +436,7 @@ if (ast_test_flag(&flags, MUXFLAG_WRITEVOLUME)) { if (ast_strlen_zero(opts[OPT_ARG_WRITEVOLUME])) { ast_log(LOG_WARNING, "No volume level was provided for the spoken volume ('V') option.\n"); - } else if ((sscanf(opts[OPT_ARG_WRITEVOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) { + } else if ((sscanf(opts[OPT_ARG_WRITEVOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) { ast_log(LOG_NOTICE, "Spoken volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_WRITEVOLUME]); } else { writevol = get_volfactor(x); @@ -446,7 +446,7 @@ if (ast_test_flag(&flags, MUXFLAG_VOLUME)) { if (ast_strlen_zero(opts[OPT_ARG_VOLUME])) { ast_log(LOG_WARNING, "No volume level was provided for the combined volume ('W') option.\n"); - } else if ((sscanf(opts[OPT_ARG_VOLUME], "%d", &x) != 1) || (x < -4) || (x > 4)) { + } else if ((sscanf(opts[OPT_ARG_VOLUME], "%2d", &x) != 1) || (x < -4) || (x > 4)) { ast_log(LOG_NOTICE, "Combined volume must be a number between -4 and 4, not '%s'\n", opts[OPT_ARG_VOLUME]); } else { readvol = writevol = get_volfactor(x); Index: apps/app_readfile.c =================================================================== --- apps/app_readfile.c (revision 211568) +++ apps/app_readfile.c (revision 211569) @@ -73,7 +73,7 @@ } if (length) { - if ((sscanf(length, "%d", &len) != 1) || (len < 0)) { + if ((sscanf(length, "%30d", &len) != 1) || (len < 0)) { ast_log(LOG_WARNING, "%s is not a positive number, defaulting length to max\n", length); len = 0; } Index: apps/app_meetme.c =================================================================== --- apps/app_meetme.c (revision 211568) +++ apps/app_meetme.c (revision 211569) @@ -900,7 +900,7 @@ AST_LIST_INSERT_HEAD(&confs, cnf, list); /* Reserve conference number in map */ - if ((sscanf(cnf->confno, "%d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024)) + if ((sscanf(cnf->confno, "%30d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024)) conf_map[confno_int] = 1; cnfout: @@ -1527,7 +1527,7 @@ AST_LIST_LOCK(&confs); if (ast_atomic_dec_and_test(&conf->refcount)) { /* Take the conference room number out of an inuse state */ - if ((sscanf(conf->confno, "%d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024)) + if ((sscanf(conf->confno, "%4d", &confno_int) == 1) && (confno_int >= 0 && confno_int < 1024)) conf_map[confno_int] = 0; conf_free(conf); res = 1; @@ -1691,7 +1691,7 @@ /* Possible timeout waiting for marked user */ if ((confflags & CONFFLAG_WAITMARKED) && !ast_strlen_zero(optargs[OPT_ARG_WAITMARKED]) && - (sscanf(optargs[OPT_ARG_WAITMARKED], "%d", &opt_waitmarked_timeout) == 1) && + (sscanf(optargs[OPT_ARG_WAITMARKED], "%30d", &opt_waitmarked_timeout) == 1) && (opt_waitmarked_timeout > 0)) { timeout = time(NULL) + opt_waitmarked_timeout; } @@ -3290,7 +3290,7 @@ if (!res) ast_waitstream(chan, ""); } else { - if (sscanf(confno, "%d", &confno_int) == 1) { + if (sscanf(confno, "%30d", &confno_int) == 1) { if (!ast_test_flag(&confflags, CONFFLAG_QUIET)) { res = ast_streamfile(chan, "conf-enteringno", chan->language); if (!res) { @@ -3417,7 +3417,7 @@ struct ast_conf_user *user = NULL; int cid; - sscanf(callerident, "%i", &cid); + sscanf(callerident, "%30i", &cid); if (conf && callerident) { AST_LIST_TRAVERSE(&conf->userlist, user, list) { if (cid == user->user_no) @@ -3892,7 +3892,7 @@ rt_log_members = 1; if ((val = ast_variable_retrieve(cfg, "general", "audiobuffers"))) { - if ((sscanf(val, "%d", &audio_buffers) != 1)) { + if ((sscanf(val, "%30d", &audio_buffers) != 1)) { ast_log(LOG_WARNING, "audiobuffers setting must be a number, not '%s'\n", val); audio_buffers = DEFAULT_AUDIO_BUFFERS; } else if ((audio_buffers < DAHDI_DEFAULT_NUM_BUFS) || (audio_buffers > DAHDI_MAX_NUM_BUFS)) { @@ -3909,19 +3909,19 @@ if ((val = ast_variable_retrieve(cfg, "general", "logmembercount"))) rt_log_members = ast_true(val); if ((val = ast_variable_retrieve(cfg, "general", "fuzzystart"))) { - if ((sscanf(val, "%d", &fuzzystart) != 1)) { + if ((sscanf(val, "%30d", &fuzzystart) != 1)) { ast_log(LOG_WARNING, "fuzzystart must be a number, not '%s'\n", val); fuzzystart = 0; } } if ((val = ast_variable_retrieve(cfg, "general", "earlyalert"))) { - if ((sscanf(val, "%d", &earlyalert) != 1)) { + if ((sscanf(val, "%30d", &earlyalert) != 1)) { ast_log(LOG_WARNING, "earlyalert must be a number, not '%s'\n", val); earlyalert = 0; } } if ((val = ast_variable_retrieve(cfg, "general", "endalert"))) { - if ((sscanf(val, "%d", &endalert) != 1)) { + if ((sscanf(val, "%30d", &endalert) != 1)) { ast_log(LOG_WARNING, "endalert must be a number, not '%s'\n", val); endalert = 0; } @@ -5487,7 +5487,7 @@ if (!strcasecmp(var->name, "autocontext")) ast_string_field_set(trunk, autocontext, var->value); else if (!strcasecmp(var->name, "ringtimeout")) { - if (sscanf(var->value, "%u", &trunk->ring_timeout) != 1) { + if (sscanf(var->value, "%30u", &trunk->ring_timeout) != 1) { ast_log(LOG_WARNING, "Invalid ringtimeout '%s' specified for trunk '%s'\n", var->value, trunk->name); trunk->ring_timeout = 0; @@ -5563,13 +5563,13 @@ char *name, *value = cur; name = strsep(&value, "="); if (!strcasecmp(name, "ringtimeout")) { - if (sscanf(value, "%u", &trunk_ref->ring_timeout) != 1) { + if (sscanf(value, "%30u", &trunk_ref->ring_timeout) != 1) { ast_log(LOG_WARNING, "Invalid ringtimeout value '%s' for " "trunk '%s' on station '%s'\n", value, trunk->name, station->name); trunk_ref->ring_timeout = 0; } } else if (!strcasecmp(name, "ringdelay")) { - if (sscanf(value, "%u", &trunk_ref->ring_delay) != 1) { + if (sscanf(value, "%30u", &trunk_ref->ring_delay) != 1) { ast_log(LOG_WARNING, "Invalid ringdelay value '%s' for " "trunk '%s' on station '%s'\n", value, trunk->name, station->name); trunk_ref->ring_delay = 0; @@ -5618,13 +5618,13 @@ else if (!strcasecmp(var->name, "autocontext")) ast_string_field_set(station, autocontext, var->value); else if (!strcasecmp(var->name, "ringtimeout")) { - if (sscanf(var->value, "%u", &station->ring_timeout) != 1) { + if (sscanf(var->value, "%30u", &station->ring_timeout) != 1) { ast_log(LOG_WARNING, "Invalid ringtimeout '%s' specified for station '%s'\n", var->value, station->name); station->ring_timeout = 0; } } else if (!strcasecmp(var->name, "ringdelay")) { - if (sscanf(var->value, "%u", &station->ring_delay) != 1) { + if (sscanf(var->value, "%30u", &station->ring_delay) != 1) { ast_log(LOG_WARNING, "Invalid ringdelay '%s' specified for station '%s'\n", var->value, station->name); station->ring_delay = 0; Index: apps/app_morsecode.c =================================================================== --- apps/app_morsecode.c (revision 211568) +++ apps/app_morsecode.c (revision 211569) @@ -113,7 +113,7 @@ /* Use variable MORESEDITLEN, if set (else 80) */ ast_channel_lock(chan); ditlenc = pbx_builtin_getvar_helper(chan, "MORSEDITLEN"); - if (ast_strlen_zero(ditlenc) || (sscanf(ditlenc, "%d", &ditlen) != 1)) { + if (ast_strlen_zero(ditlenc) || (sscanf(ditlenc, "%30d", &ditlen) != 1)) { ditlen = 80; } ast_channel_unlock(chan); @@ -121,7 +121,7 @@ /* Use variable MORSETONE, if set (else 800) */ ast_channel_lock(chan); tonec = pbx_builtin_getvar_helper(chan, "MORSETONE"); - if (ast_strlen_zero(tonec) || (sscanf(tonec, "%d", &tone) != 1)) { + if (ast_strlen_zero(tonec) || (sscanf(tonec, "%30d", &tone) != 1)) { tone = 800; } ast_channel_unlock(chan); Index: apps/app_minivm.c =================================================================== --- apps/app_minivm.c (revision 211568) +++ apps/app_minivm.c (revision 211569) @@ -1735,7 +1735,7 @@ if (ast_test_flag(&flags, OPT_RECORDGAIN)) { int gain; - if (sscanf(opts[OPT_ARG_RECORDGAIN], "%d", &gain) != 1) { + if (sscanf(opts[OPT_ARG_RECORDGAIN], "%30d", &gain) != 1) { ast_log(LOG_WARNING, "Invalid value '%s' provided for record gain option\n", opts[OPT_ARG_RECORDGAIN]); return -1; } else @@ -2160,7 +2160,7 @@ } else if (!strcasecmp(var->name, "pager")) { ast_copy_string(vmu->pager, var->value, sizeof(vmu->pager)); } else if (!strcasecmp(var->name, "volgain")) { - sscanf(var->value, "%lf", &vmu->volgain); + sscanf(var->value, "%30lf", &vmu->volgain); } else { ast_log(LOG_ERROR, "Unknown configuration option for minivm account %s : %s\n", name, var->name); } @@ -2330,7 +2330,7 @@ global_silencethreshold = atoi(var->value); } else if (!strcmp(var->name, "maxmessage")) { int x; - if (sscanf(var->value, "%d", &x) == 1) { + if (sscanf(var->value, "%30d", &x) == 1) { global_vmmaxmessage = x; } else { error ++; @@ -2338,7 +2338,7 @@ } } else if (!strcmp(var->name, "minmessage")) { int x; - if (sscanf(var->value, "%d", &x) == 1) { + if (sscanf(var->value, "%30d", &x) == 1) { global_vmminmessage = x; if (global_maxsilence <= global_vmminmessage) ast_log(LOG_WARNING, "maxsilence should be less than minmessage or you may get empty messages\n"); Index: apps/app_macro.c =================================================================== --- apps/app_macro.c (revision 211568) +++ apps/app_macro.c (revision 211569) @@ -208,12 +208,12 @@ /* does the user want a deeper rabbit hole? */ ast_channel_lock(chan); if ((s = pbx_builtin_getvar_helper(chan, "MACRO_RECURSION"))) { - sscanf(s, "%d", &maxdepth); + sscanf(s, "%30d", &maxdepth); } /* Count how many levels deep the rabbit hole goes */ if ((s = pbx_builtin_getvar_helper(chan, "MACRO_DEPTH"))) { - sscanf(s, "%d", &depth); + sscanf(s, "%30d", &depth); } /* Used for detecting whether to return when a Macro is called from another Macro after hangup */ @@ -221,7 +221,7 @@ pbx_builtin_setvar_helper(chan, "MACRO_IN_HANGUP", "1"); if ((inhangupc = pbx_builtin_getvar_helper(chan, "MACRO_IN_HANGUP"))) { - sscanf(inhangupc, "%d", &inhangup); + sscanf(inhangupc, "%30d", &inhangup); } ast_channel_unlock(chan); @@ -474,7 +474,7 @@ if ((offsets = pbx_builtin_getvar_helper(chan, "MACRO_OFFSET"))) { /* Handle macro offset if it's set by checking the availability of step n + offset + 1, otherwise continue normally if there is any problem */ - if (sscanf(offsets, "%d", &offset) == 1) { + if (sscanf(offsets, "%30d", &offset) == 1) { if (ast_exists_extension(chan, chan->context, chan->exten, chan->priority + offset + 1, chan->cid.cid_num)) { chan->priority += offset; } Index: apps/app_sms.c =================================================================== --- apps/app_sms.c (revision 211568) +++ apps/app_sms.c (revision 211569) @@ -856,7 +856,7 @@ } else if (!strcmp(line, "scts")) { /* get date/time */ int Y, m, d, H, M, S; /* XXX Why aren't we using ast_strptime here? */ - if (sscanf(p, "%d-%d-%dT%d:%d:%d", &Y, &m, &d, &H, &M, &S) == 6) { + if (sscanf(p, "%4d-%2d-%2dT%2d:%2d:%2d", &Y, &m, &d, &H, &M, &S) == 6) { struct ast_tm t = { 0, }; t.tm_year = Y - 1900; t.tm_mon = m - 1; Index: apps/app_verbose.c =================================================================== --- apps/app_verbose.c (revision 211568) +++ apps/app_verbose.c (revision 211569) @@ -65,7 +65,7 @@ args.level = "0"; } - if (sscanf(args.level, "%d", &vsize) != 1) { + if (sscanf(args.level, "%30d", &vsize) != 1) { vsize = 0; ast_log(LOG_WARNING, "'%s' is not a verboser number\n", args.level); } Index: apps/app_voicemail.c =================================================================== --- apps/app_voicemail.c (revision 211568) +++ apps/app_voicemail.c (revision 211569) @@ -803,7 +803,7 @@ } else if (!strcasecmp(var, "sayduration")){ ast_set2_flag(vmu, ast_true(value), VM_SAYDURATION); } else if (!strcasecmp(var, "saydurationm")){ - if (sscanf(value, "%d", &x) == 1) { + if (sscanf(value, "%30d", &x) == 1) { vmu->saydurationm = x; } else { ast_log(AST_LOG_WARNING, "Invalid min duration for say duration\n"); @@ -837,7 +837,7 @@ vmu->maxmsg = MAXMSGLIMIT; } } else if (!strcasecmp(var, "backupdeleted")) { - if (sscanf(value, "%d", &x) == 1) + if (sscanf(value, "%30d", &x) == 1) vmu->maxdeletedmsg = x; else if (ast_true(value)) vmu->maxdeletedmsg = MAXMSG; @@ -852,7 +852,7 @@ vmu->maxdeletedmsg = MAXMSGLIMIT; } } else if (!strcasecmp(var, "volgain")) { - sscanf(value, "%lf", &vmu->volgain); + sscanf(value, "%30lf", &vmu->volgain); } else if (!strcasecmp(var, "options")) { apply_options(vmu, value); } @@ -2976,7 +2976,7 @@ ast_odbc_release_obj(obj); goto yuck; } - if (sscanf(rowdata, "%d", &x) != 1) + if (sscanf(rowdata, "%30d", &x) != 1) ast_log(AST_LOG_WARNING, "Failed to read message count!\n"); SQLFreeHandle (SQL_HANDLE_STMT, stmt); ast_odbc_release_obj(obj); @@ -3031,7 +3031,7 @@ ast_odbc_release_obj(obj); goto yuck; } - if (sscanf(rowdata, "%d", &x) != 1) + if (sscanf(rowdata, "%30d", &x) != 1) ast_log(AST_LOG_WARNING, "Failed to read message count!\n"); SQLFreeHandle (SQL_HANDLE_STMT, stmt); ast_odbc_release_obj(obj); @@ -3449,7 +3449,7 @@ * find each file. */ msgdir = opendir(dir); while ((msgdirent = readdir(msgdir))) { - if (sscanf(msgdirent->d_name, "msg%d", &msgdirint) == 1 && msgdirint < MAXMSGLIMIT) + if (sscanf(msgdirent->d_name, "msg%30d", &msgdirint) == 1 && msgdirint < MAXMSGLIMIT) map[msgdirint] = 1; } closedir(msgdir); @@ -3773,7 +3773,7 @@ pbx_builtin_setvar_helper(ast, "ORIG_VM_CIDNUM", origcidnum); } - if ((origtime = ast_variable_retrieve(msg_cfg, "message", "origtime")) && sscanf(origtime, "%d", &inttime) == 1) { + if ((origtime = ast_variable_retrieve(msg_cfg, "message", "origtime")) && sscanf(origtime, "%30d", &inttime) == 1) { struct timeval tv = { inttime, }; struct ast_tm tm; ast_localtime(&tv, &tm, NULL); @@ -4136,7 +4136,7 @@ /* You might be tempted to do origdate, except that a) it's in the wrong * format, and b) it's missing for IMAP recordings. */ - if ((v = ast_variable_retrieve(msg_cfg, "message", "origtime")) && sscanf(v, "%d", &inttime) == 1) { + if ((v = ast_variable_retrieve(msg_cfg, "message", "origtime")) && sscanf(v, "%30d", &inttime) == 1) { struct timeval tv = { inttime, }; struct ast_tm tm; ast_localtime(&tv, &tm, NULL); @@ -8832,7 +8832,7 @@ if (ast_test_flag(&flags, OPT_RECORDGAIN)) { int gain; if (!ast_strlen_zero(opts[OPT_ARG_RECORDGAIN])) { - if (sscanf(opts[OPT_ARG_RECORDGAIN], "%d", &gain) != 1) { + if (sscanf(opts[OPT_ARG_RECORDGAIN], "%30d", &gain) != 1) { ast_log(AST_LOG_WARNING, "Invalid value '%s' provided for record gain option\n", opts[OPT_ARG_RECORDGAIN]); return -1; } else { @@ -8845,7 +8845,7 @@ if (ast_test_flag(&flags, OPT_AUTOPLAY) ) { play_auto = 1; if (opts[OPT_ARG_PLAYFOLDER]) { - if (sscanf(opts[OPT_ARG_PLAYFOLDER], "%d", &play_folder) != 1) { + if (sscanf(opts[OPT_ARG_PLAYFOLDER], "%30d", &play_folder) != 1) { ast_log(AST_LOG_WARNING, "Invalid value '%s' provided for folder autoplay option\n", opts[OPT_ARG_PLAYFOLDER]); } } else { @@ -9511,7 +9511,7 @@ if (ast_test_flag(&flags, OPT_RECORDGAIN)) { int gain; - if (sscanf(opts[OPT_ARG_RECORDGAIN], "%d", &gain) != 1) { + if (sscanf(opts[OPT_ARG_RECORDGAIN], "%30d", &gain) != 1) { ast_log(AST_LOG_WARNING, "Invalid value '%s' provided for record gain option\n", opts[OPT_ARG_RECORDGAIN]); return -1; } else { @@ -10340,7 +10340,7 @@ volgain = 0.0; if ((val = ast_variable_retrieve(cfg, "general", "volgain"))) - sscanf(val, "%lf", &volgain); + sscanf(val, "%30lf", &volgain); #ifdef ODBC_STORAGE strcpy(odbc_database, "asterisk"); @@ -10380,7 +10380,7 @@ if (!(val = ast_variable_retrieve(cfg, "general", "backupdeleted"))) { maxdeletedmsg = 0; } else { - if (sscanf(val, "%d", &x) == 1) + if (sscanf(val, "%30d", &x) == 1) maxdeletedmsg = x; else if (ast_true(val)) maxdeletedmsg = MAXMSG; @@ -10532,7 +10532,7 @@ vmmaxsecs = 0; if ((val = ast_variable_retrieve(cfg, "general", "maxsecs"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { vmmaxsecs = x; } else { ast_log(AST_LOG_WARNING, "Invalid max message time length\n"); @@ -10543,7 +10543,7 @@ maxmessage_deprecate = 1; ast_log(AST_LOG_WARNING, "Setting 'maxmessage' has been deprecated in favor of 'maxsecs'.\n"); } - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { vmmaxsecs = x; } else { ast_log(AST_LOG_WARNING, "Invalid max message time length\n"); @@ -10552,7 +10552,7 @@ vmminsecs = 0; if ((val = ast_variable_retrieve(cfg, "general", "minsecs"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { vmminsecs = x; if (maxsilence / 1000 >= vmminsecs) { ast_log(AST_LOG_WARNING, "maxsilence should be less than minmessage or you may get empty messages\n"); @@ -10566,7 +10566,7 @@ maxmessage_deprecate = 1; ast_log(AST_LOG_WARNING, "Setting 'minmessage' has been deprecated in favor of 'minsecs'.\n"); } - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { vmminsecs = x; if (maxsilence / 1000 >= vmminsecs) { ast_log(AST_LOG_WARNING, "maxsilence should be less than minmessage or you may get empty messages\n"); @@ -10583,7 +10583,7 @@ skipms = 3000; if ((val = ast_variable_retrieve(cfg, "general", "maxgreet"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { maxgreet = x; } else { ast_log(AST_LOG_WARNING, "Invalid max message greeting length\n"); @@ -10591,7 +10591,7 @@ } if ((val = ast_variable_retrieve(cfg, "general", "skipms"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { skipms = x; } else { ast_log(AST_LOG_WARNING, "Invalid skipms value\n"); @@ -10600,7 +10600,7 @@ maxlogins = 3; if ((val = ast_variable_retrieve(cfg, "general", "maxlogins"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { maxlogins = x; } else { ast_log(AST_LOG_WARNING, "Invalid max failed login attempts\n"); @@ -10609,7 +10609,7 @@ minpassword = MINPASSWORD; if ((val = ast_variable_retrieve(cfg, "general", "minpassword"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { minpassword = x; } else { ast_log(AST_LOG_WARNING, "Invalid minimum password length. Default to %d\n", minpassword); @@ -10705,7 +10705,7 @@ saydurationminfo = 2; if ((val = ast_variable_retrieve(cfg, "general", "saydurationm"))) { - if (sscanf(val, "%d", &x) == 1) { + if (sscanf(val, "%30d", &x) == 1) { saydurationminfo = x; } else { ast_log(AST_LOG_WARNING, "Invalid min duration for say duration\n"); @@ -10770,7 +10770,7 @@ poll_freq = DEFAULT_POLL_FREQ; if ((val = ast_variable_retrieve(cfg, "general", "pollfreq"))) { - if (sscanf(val, "%u", &poll_freq) != 1) { + if (sscanf(val, "%30u", &poll_freq) != 1) { poll_freq = DEFAULT_POLL_FREQ; ast_log(AST_LOG_ERROR, "'%s' is not a valid value for the pollfreq option!\n", val); } Index: apps/app_waitforsilence.c =================================================================== --- apps/app_waitforsilence.c (revision 211568) +++ apps/app_waitforsilence.c (revision 211569) @@ -172,9 +172,9 @@ res = ast_answer(chan); /* Answer the channel */ } - if (!data || ( (sscanf(data, "%d,%d,%d", &timereqd, &iterations, &timeout) != 3) && - (sscanf(data, "%d,%d", &timereqd, &iterations) != 2) && - (sscanf(data, "%d", &timereqd) != 1) ) ) { + if (!data || ( (sscanf(data, "%30d,%30d,%30d", &timereqd, &iterations, &timeout) != 3) && + (sscanf(data, "%30d,%30d", &timereqd, &iterations) != 2) && + (sscanf(data, "%30d", &timereqd) != 1) ) ) { ast_log(LOG_WARNING, "Using default value of 1000ms, 1 iteration, no timeout\n"); } Index: apps/app_disa.c =================================================================== --- apps/app_disa.c (revision 211568) +++ apps/app_disa.c (revision 211569) @@ -223,7 +223,7 @@ if (!(k&1)) { /* if in password state */ if (j == '#') { /* end of password */ /* see if this is an integer */ - if (sscanf(args.passcode,"%d",&j) < 1) { /* nope, it must be a filename */ + if (sscanf(args.passcode,"%30d",&j) < 1) { /* nope, it must be a filename */ fp = fopen(args.passcode,"r"); if (!fp) { ast_log(LOG_WARNING,"DISA password file %s not found on chan %s\n",args.passcode,chan->name); @@ -249,7 +249,7 @@ ast_debug(1, "Mailbox: %s\n",args.mailbox); /* password must be in valid format (numeric) */ - if (sscanf(args.passcode,"%d", &j) < 1) + if (sscanf(args.passcode,"%30d", &j) < 1) continue; /* if we got it */ if (!strcmp(exten,args.passcode)) { Index: apps/app_osplookup.c =================================================================== --- apps/app_osplookup.c (revision 211568) +++ apps/app_osplookup.c (revision 211569) @@ -247,7 +247,7 @@ ast_log(LOG_WARNING, "OSP: Too many Service Points at line %d\n", v->lineno); } } else if (!strcasecmp(v->name, "maxconnections")) { - if ((sscanf(v->value, "%d", &t) == 1) && (t >= OSP_MIN_MAXCONNECTIONS) && (t <= OSP_MAX_MAXCONNECTIONS)) { + if ((sscanf(v->value, "%30d", &t) == 1) && (t >= OSP_MIN_MAXCONNECTIONS) && (t <= OSP_MAX_MAXCONNECTIONS)) { p->maxconnections = t; ast_debug(1, "OSP: maxconnections '%d'\n", t); } else { @@ -255,7 +255,7 @@ OSP_MIN_MAXCONNECTIONS, OSP_MAX_MAXCONNECTIONS, v->value, v->lineno); } } else if (!strcasecmp(v->name, "retrydelay")) { - if ((sscanf(v->value, "%d", &t) == 1) && (t >= OSP_MIN_RETRYDELAY) && (t <= OSP_MAX_RETRYDELAY)) { + if ((sscanf(v->value, "%30d", &t) == 1) && (t >= OSP_MIN_RETRYDELAY) && (t <= OSP_MAX_RETRYDELAY)) { p->retrydelay = t; ast_debug(1, "OSP: retrydelay '%d'\n", t); } else { @@ -263,7 +263,7 @@ OSP_MIN_RETRYDELAY, OSP_MAX_RETRYDELAY, v->value, v->lineno); } } else if (!strcasecmp(v->name, "retrylimit")) { - if ((sscanf(v->value, "%d", &t) == 1) && (t >= OSP_MIN_RETRYLIMIT) && (t <= OSP_MAX_RETRYLIMIT)) { + if ((sscanf(v->value, "%30d", &t) == 1) && (t >= OSP_MIN_RETRYLIMIT) && (t <= OSP_MAX_RETRYLIMIT)) { p->retrylimit = t; ast_debug(1, "OSP: retrylimit '%d'\n", t); } else { @@ -271,7 +271,7 @@ OSP_MIN_RETRYLIMIT, OSP_MAX_RETRYLIMIT, v->value, v->lineno); } } else if (!strcasecmp(v->name, "timeout")) { - if ((sscanf(v->value, "%d", &t) == 1) && (t >= OSP_MIN_TIMEOUT) && (t <= OSP_MAX_TIMEOUT)) { + if ((sscanf(v->value, "%30d", &t) == 1) && (t >= OSP_MIN_TIMEOUT) && (t <= OSP_MAX_TIMEOUT)) { p->timeout = t; ast_debug(1, "OSP: timeout '%d'\n", t); } else { @@ -282,7 +282,7 @@ ast_copy_string(p->source, v->value, sizeof(p->source)); ast_debug(1, "OSP: source '%s'\n", p->source); } else if (!strcasecmp(v->name, "authpolicy")) { - if ((sscanf(v->value, "%d", &t) == 1) && ((t == OSP_AUTH_NO) || (t == OSP_AUTH_YES) || (t == OSP_AUTH_EXCLUSIVE))) { + if ((sscanf(v->value, "%30d", &t) == 1) && ((t == OSP_AUTH_NO) || (t == OSP_AUTH_YES) || (t == OSP_AUTH_EXCLUSIVE))) { p->authpolicy = t; ast_debug(1, "OSP: authpolicy '%d'\n", t); } else { @@ -1392,11 +1392,11 @@ headp = &chan->varshead; AST_LIST_TRAVERSE(headp, current, entries) { if (!strcasecmp(ast_var_name(current), "OSPINHANDLE")) { - if (sscanf(ast_var_value(current), "%d", &result.inhandle) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.inhandle) != 1) { result.inhandle = OSP_INVALID_HANDLE; } } else if (!strcasecmp(ast_var_name(current), "OSPINTIMELIMIT")) { - if (sscanf(ast_var_value(current), "%d", &result.intimelimit) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.intimelimit) != 1) { result.intimelimit = OSP_DEF_TIMELIMIT; } } else if (!strcasecmp(ast_var_name(current), "OSPINNETWORKID")) { @@ -1533,7 +1533,7 @@ AST_STANDARD_APP_ARGS(args, tmp); - if (!ast_strlen_zero(args.cause) && sscanf(args.cause, "%d", &cause) != 1) { + if (!ast_strlen_zero(args.cause) && sscanf(args.cause, "%30d", &cause) != 1) { cause = 0; } ast_debug(1, "OSPNext: cause '%d'\n", cause); @@ -1551,23 +1551,23 @@ headp = &chan->varshead; AST_LIST_TRAVERSE(headp, current, entries) { if (!strcasecmp(ast_var_name(current), "OSPINHANDLE")) { - if (sscanf(ast_var_value(current), "%d", &result.inhandle) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.inhandle) != 1) { result.inhandle = OSP_INVALID_HANDLE; } } else if (!strcasecmp(ast_var_name(current), "OSPOUTHANDLE")) { - if (sscanf(ast_var_value(current), "%d", &result.outhandle) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.outhandle) != 1) { result.outhandle = OSP_INVALID_HANDLE; } } else if (!strcasecmp(ast_var_name(current), "OSPINTIMELIMIT")) { - if (sscanf(ast_var_value(current), "%d", &result.intimelimit) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.intimelimit) != 1) { result.intimelimit = OSP_DEF_TIMELIMIT; } } else if (!strcasecmp(ast_var_name(current), "OSPOUTCALLIDTYPES")) { - if (sscanf(ast_var_value(current), "%d", &callidtypes) != 1) { + if (sscanf(ast_var_value(current), "%30d", &callidtypes) != 1) { callidtypes = OSP_CALLID_UNDEFINED; } } else if (!strcasecmp(ast_var_name(current), "OSPRESULTS")) { - if (sscanf(ast_var_value(current), "%d", &result.numresults) != 1) { + if (sscanf(ast_var_value(current), "%30d", &result.numresults) != 1) { result.numresults = 0; } } @@ -1686,11 +1686,11 @@ headp = &chan->varshead; AST_LIST_TRAVERSE(headp, current, entries) { if (!strcasecmp(ast_var_name(current), "OSPINHANDLE")) { - if (sscanf(ast_var_value(current), "%d", &inhandle) != 1) { + if (sscanf(ast_var_value(current), "%30d", &inhandle) != 1) { inhandle = OSP_INVALID_HANDLE; } } else if (!strcasecmp(ast_var_name(current), "OSPOUTHANDLE")) { - if (sscanf(ast_var_value(current), "%d", &outhandle) != 1) { + if (sscanf(ast_var_value(current), "%30d", &outhandle) != 1) { outhandle = OSP_INVALID_HANDLE; } } else if (!recorded && @@ -1707,7 +1707,7 @@ ast_debug(1, "OSPFinish: OSPOUTHANDLE '%d'\n", outhandle); ast_debug(1, "OSPFinish: recorded '%d'\n", recorded); - if (!ast_strlen_zero(args.cause) && sscanf(args.cause, "%d", &cause) != 1) { + if (!ast_strlen_zero(args.cause) && sscanf(args.cause, "%30d", &cause) != 1) { cause = 0; } ast_debug(1, "OSPFinish: cause '%d'\n", cause); @@ -1799,7 +1799,7 @@ t = ast_variable_retrieve(cfg, OSP_GENERAL_CAT, "tokenformat"); if (t) { - if ((sscanf(t, "%d", &v) == 1) && + if ((sscanf(t, "%30d", &v) == 1) && ((v == TOKEN_ALGO_SIGNED) || (v == TOKEN_ALGO_UNSIGNED) || (v == TOKEN_ALGO_BOTH))) { osp_tokenformat = v; Index: apps/app_dahdibarge.c =================================================================== --- apps/app_dahdibarge.c (revision 211568) +++ apps/app_dahdibarge.c (revision 211569) @@ -258,8 +258,8 @@ char confnostr[80] = ""; if (!ast_strlen_zero(data)) { - if ((sscanf(data, "DAHDI/%d", &confno) != 1) && - (sscanf(data, "%d", &confno) != 1)) { + if ((sscanf(data, "DAHDI/%30d", &confno) != 1) && + (sscanf(data, "%30d", &confno) != 1)) { ast_log(LOG_WARNING, "DAHDIBarge Argument (if specified) must be a channel number, not '%s'\n", (char *)data); return 0; } @@ -273,7 +273,7 @@ confnostr[0] = '\0'; res = ast_app_getdata(chan, "conf-getchannel",confnostr, sizeof(confnostr) - 1, 0); if (res <0) goto out; - if (sscanf(confnostr, "%d", &confno) != 1) + if (sscanf(confnostr, "%30d", &confno) != 1) confno = 0; } if (confno) { Index: apps/app_privacy.c =================================================================== --- apps/app_privacy.c (revision 211568) +++ apps/app_privacy.c (revision 211569) @@ -92,13 +92,13 @@ AST_STANDARD_APP_ARGS(args, parse); if (args.maxretries) { - if (sscanf(args.maxretries, "%d", &x) == 1) + if (sscanf(args.maxretries, "%30d", &x) == 1) maxretries = x; else ast_log(LOG_WARNING, "Invalid max retries argument\n"); } if (args.minlength) { - if (sscanf(args.minlength, "%d", &x) == 1) + if (sscanf(args.minlength, "%30d", &x) == 1) minlength = x; else ast_log(LOG_WARNING, "Invalid min length argument\n"); Index: apps/app_record.c =================================================================== --- apps/app_record.c (revision 211568) +++ apps/app_record.c (revision 211569) @@ -146,7 +146,7 @@ return -1; } if (args.silence) { - if ((sscanf(args.silence, "%d", &i) == 1) && (i > -1)) { + if ((sscanf(args.silence, "%30d", &i) == 1) && (i > -1)) { silence = i * 1000; } else if (!ast_strlen_zero(args.silence)) { ast_log(LOG_WARNING, "'%s' is not a valid silence duration\n", args.silence); @@ -154,7 +154,7 @@ } if (args.maxduration) { - if ((sscanf(args.maxduration, "%d", &i) == 1) && (i > -1)) + if ((sscanf(args.maxduration, "%30d", &i) == 1) && (i > -1)) /* Convert duration to milliseconds */ maxduration = i * 1000; else if (!ast_strlen_zero(args.maxduration)) Index: apps/app_waituntil.c =================================================================== --- apps/app_waituntil.c (revision 211568) +++ apps/app_waituntil.c (revision 211569) @@ -59,7 +59,7 @@ return 0; } - if (sscanf(data, "%ld%lf", &seconds, &fraction) == 0) { + if (sscanf(data, "%30ld%30lf", &seconds, &fraction) == 0) { ast_log(LOG_WARNING, "WaitUntil called with non-numeric argument\n"); pbx_builtin_setvar_helper(chan, "WAITUNTILSTATUS", "FAILURE"); return 0; Index: apps/app_queue.c =================================================================== --- apps/app_queue.c (revision 211568) +++ apps/app_queue.c (revision 211569) @@ -4653,7 +4653,7 @@ } if (!ast_strlen_zero(args.penalty)) { - if ((sscanf(args.penalty, "%d", &penalty) != 1) || penalty < 0) { + if ((sscanf(args.penalty, "%30d", &penalty) != 1) || penalty < 0) { ast_log(LOG_WARNING, "Penalty '%s' is invalid, must be an integer >= 0\n", args.penalty); penalty = 0; } @@ -4815,7 +4815,7 @@ ast_channel_lock(chan); user_priority = pbx_builtin_getvar_helper(chan, "QUEUE_PRIO"); if (user_priority) { - if (sscanf(user_priority, "%d", &prio) == 1) { + if (sscanf(user_priority, "%30d", &prio) == 1) { ast_debug(1, "%s: Got priority %d from ${QUEUE_PRIO}.\n", chan->name, prio); } else { ast_log(LOG_WARNING, "${QUEUE_PRIO}: Invalid value (%s), channel %s.\n", @@ -4830,7 +4830,7 @@ /* Get the maximum penalty from the variable ${QUEUE_MAX_PENALTY} */ if ((max_penalty_str = pbx_builtin_getvar_helper(chan, "QUEUE_MAX_PENALTY"))) { - if (sscanf(max_penalty_str, "%d", &max_penalty) == 1) { + if (sscanf(max_penalty_str, "%30d", &max_penalty) == 1) { ast_debug(1, "%s: Got max penalty %d from ${QUEUE_MAX_PENALTY}.\n", chan->name, max_penalty); } else { ast_log(LOG_WARNING, "${QUEUE_MAX_PENALTY}: Invalid value (%s), channel %s.\n", @@ -4842,7 +4842,7 @@ } if ((min_penalty_str = pbx_builtin_getvar_helper(chan, "QUEUE_MIN_PENALTY"))) { - if (sscanf(min_penalty_str, "%d", &min_penalty) == 1) { + if (sscanf(min_penalty_str, "%30d", &min_penalty) == 1) { ast_debug(1, "%s: Got min penalty %d from ${QUEUE_MIN_PENALTY}.\n", chan->name, min_penalty); } else { ast_log(LOG_WARNING, "${QUEUE_MIN_PENALTY}: Invalid value (%s), channel %s.\n", @@ -6115,7 +6115,7 @@ if (ast_strlen_zero(penalty_s)) penalty = 0; - else if (sscanf(penalty_s, "%d", &penalty) != 1 || penalty < 0) + else if (sscanf(penalty_s, "%30d", &penalty) != 1 || penalty < 0) penalty = 0; if (ast_strlen_zero(paused_s)) @@ -6308,7 +6308,7 @@ queuename = a->argv[5]; interface = a->argv[3]; if (a->argc >= 8) { - if (sscanf(a->argv[7], "%d", &penalty) == 1) { + if (sscanf(a->argv[7], "%30d", &penalty) == 1) { if (penalty < 0) { ast_cli(a->fd, "Penalty must be >= 0\n"); penalty = 0; Index: apps/app_followme.c =================================================================== --- apps/app_followme.c (revision 211568) +++ apps/app_followme.c (revision 211569) @@ -307,7 +307,7 @@ featuredigittostr = ast_variable_retrieve(cfg, "general", "featuredigittimeout"); if (!ast_strlen_zero(featuredigittostr)) { - if (!sscanf(featuredigittostr, "%d", &featuredigittimeout)) + if (!sscanf(featuredigittostr, "%30d", &featuredigittimeout)) featuredigittimeout = 5000; } Index: apps/app_waitforring.c =================================================================== --- apps/app_waitforring.c (revision 211568) +++ apps/app_waitforring.c (revision 211569) @@ -52,7 +52,7 @@ double s; int ms; - if (!data || (sscanf(data, "%lg", &s) != 1)) { + if (!data || (sscanf(data, "%30lg", &s) != 1)) { ast_log(LOG_WARNING, "WaitForRing requires an argument (minimum seconds)\n"); return 0; } Index: doc/CODING-GUIDELINES =================================================================== --- doc/CODING-GUIDELINES (revision 211568) +++ doc/CODING-GUIDELINES (revision 211569) @@ -379,6 +379,17 @@ use a direct strcpy(), as it can be inlined and optimized to simple processor operations, unlike ast_copy_string(). +* String conversions +-------------------- + +When converting from strings to integers or floats, use the sscanf function +in preference to the atoi and atof family of functions, as sscanf detects +errors. Always check the return value of sscanf to verify that your numeric +variables successfully scanned before using them. Also, to avoid a potential +libc bug, always specify a maximum width for each format specifier, including +integers and floats. A good length for both integers and floats is 30, as +this is more than generous, even if you're using doubles or long integers. + * Use of functions ------------------ Index: funcs/func_speex.c =================================================================== --- funcs/func_speex.c (revision 211568) +++ funcs/func_speex.c (revision 211569) @@ -193,7 +193,7 @@ } if (!strcasecmp(cmd, "agc")) { - if (!sscanf(value, "%f", &(*sdi)->agclevel)) + if (!sscanf(value, "%30f", &(*sdi)->agclevel)) (*sdi)->agclevel = ast_true(value) ? DEFAULT_AGC_LEVEL : 0.0; if ((*sdi)->agclevel > 32768.0) { Index: funcs/func_rand.c =================================================================== --- funcs/func_rand.c (revision 211568) +++ funcs/func_rand.c (revision 211569) @@ -45,10 +45,10 @@ AST_STANDARD_APP_ARGS(args, parse); - if (ast_strlen_zero(args.min) || sscanf(args.min, "%d", &min_int) != 1) + if (ast_strlen_zero(args.min) || sscanf(args.min, "%30d", &min_int) != 1) min_int = 0; - if (ast_strlen_zero(args.max) || sscanf(args.max, "%d", &max_int) != 1) + if (ast_strlen_zero(args.max) || sscanf(args.max, "%30d", &max_int) != 1) max_int = RAND_MAX; if (max_int < min_int) { Index: funcs/func_strings.c =================================================================== --- funcs/func_strings.c (revision 211568) +++ funcs/func_strings.c (revision 211569) @@ -485,7 +485,7 @@ /* Convert the argument into the required type */ if (arg.var[argcount]) { - if (sscanf(arg.var[argcount++], "%d", &tmpi) != 1) { + if (sscanf(arg.var[argcount++], "%30d", &tmpi) != 1) { ast_log(LOG_ERROR, "Argument '%s' is not an integer number for format '%s'\n", arg.var[argcount - 1], formatbuf); goto sprintf_fail; } @@ -508,7 +508,7 @@ /* Convert the argument into the required type */ if (arg.var[argcount]) { - if (sscanf(arg.var[argcount++], "%lf", &tmpd) != 1) { + if (sscanf(arg.var[argcount++], "%30lf", &tmpd) != 1) { ast_log(LOG_ERROR, "Argument '%s' is not a floating point number for format '%s'\n", arg.var[argcount - 1], formatbuf); goto sprintf_fail; } Index: funcs/func_enum.c =================================================================== --- funcs/func_enum.c (revision 211568) +++ funcs/func_enum.c (revision 211569) @@ -262,7 +262,7 @@ goto finish; } - if (sscanf(args.resultnum, "%u", &num) != 1) { + if (sscanf(args.resultnum, "%30u", &num) != 1) { ast_log(LOG_ERROR, "Invalid value '%s' for resultnum to ENUMRESULT!\n", args.resultnum); goto finish; } Index: funcs/func_odbc.c =================================================================== --- funcs/func_odbc.c (revision 211568) +++ funcs/func_odbc.c (revision 211569) @@ -711,7 +711,7 @@ if (strcasecmp(tmp, "multirow") == 0) ast_set_flag((*query), OPT_MULTIROW); if ((tmp = ast_variable_retrieve(cfg, catg, "rowlimit"))) - sscanf(tmp, "%d", &((*query)->rowlimit)); + sscanf(tmp, "%30d", &((*query)->rowlimit)); } (*query)->acf = ast_calloc(1, sizeof(struct ast_custom_function)); Index: funcs/func_dialplan.c =================================================================== --- funcs/func_dialplan.c (revision 211568) +++ funcs/func_dialplan.c (revision 211569) @@ -55,7 +55,7 @@ if (!ast_strlen_zero(args.priority)) { int priority_num; - if (sscanf(args.priority, "%d", &priority_num) == 1 && priority_num > 0) { + if (sscanf(args.priority, "%30d", &priority_num) == 1 && priority_num > 0) { int res; res = ast_exists_extension(chan, args.context, args.exten, priority_num, chan->cid.cid_num); Index: funcs/func_timeout.c =================================================================== --- funcs/func_timeout.c (revision 211568) +++ funcs/func_timeout.c (revision 211569) @@ -101,7 +101,7 @@ if (!value) return -1; - res = sscanf(value, "%ld%lf", &sec, &x); + res = sscanf(value, "%30ld%30lf", &sec, &x); if (res == 0 || sec < 0) { when.tv_sec = 0; when.tv_usec = 0; Index: funcs/func_math.c =================================================================== --- funcs/func_math.c (revision 211568) +++ funcs/func_math.c (revision 211569) @@ -190,12 +190,12 @@ return -1; } - if (sscanf(mvalue1, "%lf", &fnum1) != 1) { + if (sscanf(mvalue1, "%30lf", &fnum1) != 1) { ast_log(LOG_WARNING, "'%s' is not a valid number\n", mvalue1); return -1; } - if (sscanf(mvalue2, "%lf", &fnum2) != 1) { + if (sscanf(mvalue2, "%30lf", &fnum2) != 1) { ast_log(LOG_WARNING, "'%s' is not a valid number\n", mvalue2); return -1; } Index: funcs/func_cut.c =================================================================== --- funcs/func_cut.c (revision 211568) +++ funcs/func_cut.c (revision 211569) @@ -89,7 +89,7 @@ } *ptrvalue++ = '\0'; sortable_keys[count2].key = ptrkey; - sscanf(ptrvalue, "%f", &sortable_keys[count2].value); + sscanf(ptrvalue, "%30f", &sortable_keys[count2].value); count2++; } @@ -153,15 +153,15 @@ int num1 = 0, num2 = MAXRESULT; char trashchar; - if (sscanf(nextgroup, "%d-%d", &num1, &num2) == 2) { + if (sscanf(nextgroup, "%30d-%30d", &num1, &num2) == 2) { /* range with both start and end */ - } else if (sscanf(nextgroup, "-%d", &num2) == 1) { + } else if (sscanf(nextgroup, "-%30d", &num2) == 1) { /* range with end */ num1 = 0; - } else if ((sscanf(nextgroup, "%d%c", &num1, &trashchar) == 2) && (trashchar == '-')) { + } else if ((sscanf(nextgroup, "%30d%1c", &num1, &trashchar) == 2) && (trashchar == '-')) { /* range with start */ num2 = MAXRESULT; - } else if (sscanf(nextgroup, "%d", &num1) == 1) { + } else if (sscanf(nextgroup, "%30d", &num1) == 1) { /* single number */ num2 = num1; } else { Index: funcs/func_channel.c =================================================================== --- funcs/func_channel.c (revision 211568) +++ funcs/func_channel.c (revision 211569) @@ -143,10 +143,10 @@ } else if (!strcasecmp(data, "callgroup")) chan->callgroup = ast_get_group(value); else if (!strcasecmp(data, "txgain")) { - sscanf(value, "%hhd", &gainset); + sscanf(value, "%4hhd", &gainset); ast_channel_setoption(chan, AST_OPTION_TXGAIN, &gainset, sizeof(gainset), 0); } else if (!strcasecmp(data, "rxgain")) { - sscanf(value, "%hhd", &gainset); + sscanf(value, "%4hhd", &gainset); ast_channel_setoption(chan, AST_OPTION_RXGAIN, &gainset, sizeof(gainset), 0); } else if (!strcasecmp(data, "transfercapability")) { unsigned short i; Index: main/utils.c =================================================================== --- main/utils.c (revision 211568) +++ main/utils.c (revision 211569) @@ -1714,7 +1714,7 @@ return -1; /* only integer at the moment, but one day we could accept more formats */ - if (sscanf(src, "%Lf%n", &dtv, &scanned) > 0) { + if (sscanf(src, "%30Lf%n", &dtv, &scanned) > 0) { dst->tv_sec = dtv; dst->tv_usec = (dtv - dst->tv_sec) * 1000000.0; if (consumed) @@ -1741,7 +1741,7 @@ return -1; /* only integer at the moment, but one day we could accept more formats */ - if (sscanf(src, "%ld%n", &t, &scanned) == 1) { + if (sscanf(src, "%30ld%n", &t, &scanned) == 1) { *dst = t; if (consumed) *consumed = scanned; Index: main/config.c =================================================================== --- main/config.c (revision 211568) +++ main/config.c (revision 211569) @@ -359,7 +359,7 @@ int lineno; int insertline; - if (!variable || sscanf(line, "%d", &insertline) != 1) + if (!variable || sscanf(line, "%30d", &insertline) != 1) return; if (!insertline) { variable->next = category->root; Index: main/cdr.c =================================================================== --- main/cdr.c (revision 211568) +++ main/cdr.c (revision 211569) @@ -1451,7 +1451,7 @@ batchsafeshutdown = ast_true(batchsafeshutdown_value); } if ((size_value = ast_variable_retrieve(config, "general", "size"))) { - if (sscanf(size_value, "%d", &cfg_size) < 1) + if (sscanf(size_value, "%30d", &cfg_size) < 1) ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", size_value); else if (cfg_size < 0) ast_log(LOG_WARNING, "Invalid maximum batch size '%d' specified, using default\n", cfg_size); @@ -1459,7 +1459,7 @@ batchsize = cfg_size; } if ((time_value = ast_variable_retrieve(config, "general", "time"))) { - if (sscanf(time_value, "%d", &cfg_time) < 1) + if (sscanf(time_value, "%30d", &cfg_time) < 1) ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", time_value); else if (cfg_time < 0) ast_log(LOG_WARNING, "Invalid maximum batch time '%d' specified, using default\n", cfg_time); Index: main/channel.c =================================================================== --- main/channel.c (revision 211568) +++ main/channel.c (revision 211569) @@ -5372,9 +5372,9 @@ c = ast_strdupa(s); while ((piece = strsep(&c, ","))) { - if (sscanf(piece, "%d-%d", &start, &finish) == 2) { + if (sscanf(piece, "%30d-%30d", &start, &finish) == 2) { /* Range */ - } else if (sscanf(piece, "%d", &start)) { + } else if (sscanf(piece, "%30d", &start)) { /* Just one */ finish = start; } else { Index: main/manager.c =================================================================== --- main/manager.c (revision 211568) +++ main/manager.c (revision 211569) @@ -1585,7 +1585,7 @@ idText[0] = '\0'; if (!ast_strlen_zero(timeouts)) { - sscanf(timeouts, "%i", &timeout); + sscanf(timeouts, "%30i", &timeout); if (timeout < -1) timeout = -1; /* XXX maybe put an upper bound, or prevent the use of 0 ? */ @@ -2071,7 +2071,7 @@ astman_send_error(s, m, "Channel not specified"); return 0; } - if (!ast_strlen_zero(priority) && (sscanf(priority, "%d", &pi) != 1)) { + if (!ast_strlen_zero(priority) && (sscanf(priority, "%30d", &pi) != 1)) { if ((pi = ast_findlabel_extension(NULL, context, exten, priority, NULL)) < 1) { astman_send_error(s, m, "Invalid priority"); return 0; @@ -2392,13 +2392,13 @@ astman_send_error(s, m, "Channel not specified"); return 0; } - if (!ast_strlen_zero(priority) && (sscanf(priority, "%d", &pi) != 1)) { + if (!ast_strlen_zero(priority) && (sscanf(priority, "%30d", &pi) != 1)) { if ((pi = ast_findlabel_extension(NULL, context, exten, priority, NULL)) < 1) { astman_send_error(s, m, "Invalid priority"); return 0; } } - if (!ast_strlen_zero(timeout) && (sscanf(timeout, "%d", &to) != 1)) { + if (!ast_strlen_zero(timeout) && (sscanf(timeout, "%30d", &to) != 1)) { astman_send_error(s, m, "Invalid timeout"); return 0; } @@ -3780,7 +3780,7 @@ for (v = params; v; v = v->next) { if (!strcasecmp(v->name, "mansession_id")) { - sscanf(v->value, "%x", &ident); + sscanf(v->value, "%30x", &ident); break; } } Index: main/features.c =================================================================== --- main/features.c (revision 211568) +++ main/features.c (revision 211569) @@ -532,7 +532,7 @@ * limitation here. If extout was not numeric, we could permit * arbitrary non-numeric extensions. */ - if (sscanf(parkingexten, "%d", &parking_space) != 1 || parking_space < 0) { + if (sscanf(parkingexten, "%30d", &parking_space) != 1 || parking_space < 0) { AST_LIST_UNLOCK(&parkinglot->parkings); parkinglot_unref(parkinglot); free(pu); @@ -3232,7 +3232,7 @@ if (parse) { if (!ast_strlen_zero(app_args.timeout)) { - if (sscanf(app_args.timeout, "%d", &args.timeout) != 1) { + if (sscanf(app_args.timeout, "%30d", &args.timeout) != 1) { ast_log(LOG_WARNING, "Invalid timeout '%s' provided\n", app_args.timeout); args.timeout = 0; } @@ -3244,7 +3244,7 @@ args.return_ext = app_args.return_ext; } if (!ast_strlen_zero(app_args.return_pri)) { - if (sscanf(app_args.return_pri, "%d", &args.return_pri) != 1) { + if (sscanf(app_args.return_pri, "%30d", &args.return_pri) != 1) { ast_log(LOG_WARNING, "Invalid priority '%s' specified\n", app_args.return_pri); args.return_pri = 0; } @@ -3512,13 +3512,13 @@ if (!strcasecmp(confvar->name, "context")) { ast_copy_string(parkinglot->parking_con, confvar->value, sizeof(parkinglot->parking_con)); } else if (!strcasecmp(confvar->name, "parkingtime")) { - if ((sscanf(confvar->value, "%d", &parkinglot->parkingtime) != 1) || (parkinglot->parkingtime < 1)) { + if ((sscanf(confvar->value, "%30d", &parkinglot->parkingtime) != 1) || (parkinglot->parkingtime < 1)) { ast_log(LOG_WARNING, "%s is not a valid parkingtime\n", confvar->value); parkinglot->parkingtime = DEFAULT_PARK_TIME; } else parkinglot->parkingtime = parkinglot->parkingtime * 1000; } else if (!strcasecmp(confvar->name, "parkpos")) { - if (sscanf(confvar->value, "%d-%d", &start, &end) != 2) { + if (sscanf(confvar->value, "%30d-%30d", &start, &end) != 2) { ast_log(LOG_WARNING, "Format for parking positions is a-b, where a and b are numbers at line %d of parking.conf\n", confvar->lineno); error = 1; } else { @@ -3680,13 +3680,13 @@ } else if (!strcasecmp(var->name, "context")) { ast_copy_string(default_parkinglot->parking_con, var->value, sizeof(default_parkinglot->parking_con)); } else if (!strcasecmp(var->name, "parkingtime")) { - if ((sscanf(var->value, "%d", &default_parkinglot->parkingtime) != 1) || (default_parkinglot->parkingtime < 1)) { + if ((sscanf(var->value, "%30d", &default_parkinglot->parkingtime) != 1) || (default_parkinglot->parkingtime < 1)) { ast_log(LOG_WARNING, "%s is not a valid parkingtime\n", var->value); default_parkinglot->parkingtime = DEFAULT_PARK_TIME; } else default_parkinglot->parkingtime = default_parkinglot->parkingtime * 1000; } else if (!strcasecmp(var->name, "parkpos")) { - if (sscanf(var->value, "%d-%d", &start, &end) != 2) { + if (sscanf(var->value, "%30d-%30d", &start, &end) != 2) { ast_log(LOG_WARNING, "Format for parking positions is a-b, where a and b are numbers at line %d of features.conf\n", var->lineno); } else if (default_parkinglot) { default_parkinglot->parking_start = start; @@ -3729,24 +3729,24 @@ } else if (!strcasecmp(var->name, "adsipark")) { adsipark = ast_true(var->value); } else if (!strcasecmp(var->name, "transferdigittimeout")) { - if ((sscanf(var->value, "%d", &transferdigittimeout) != 1) || (transferdigittimeout < 1)) { + if ((sscanf(var->value, "%30d", &transferdigittimeout) != 1) || (transferdigittimeout < 1)) { ast_log(LOG_WARNING, "%s is not a valid transferdigittimeout\n", var->value); transferdigittimeout = DEFAULT_TRANSFER_DIGIT_TIMEOUT; } else transferdigittimeout = transferdigittimeout * 1000; } else if (!strcasecmp(var->name, "featuredigittimeout")) { - if ((sscanf(var->value, "%d", &featuredigittimeout) != 1) || (featuredigittimeout < 1)) { + if ((sscanf(var->value, "%30d", &featuredigittimeout) != 1) || (featuredigittimeout < 1)) { ast_log(LOG_WARNING, "%s is not a valid featuredigittimeout\n", var->value); featuredigittimeout = DEFAULT_FEATURE_DIGIT_TIMEOUT; } } else if (!strcasecmp(var->name, "atxfernoanswertimeout")) { - if ((sscanf(var->value, "%d", &atxfernoanswertimeout) != 1) || (atxfernoanswertimeout < 1)) { + if ((sscanf(var->value, "%30d", &atxfernoanswertimeout) != 1) || (atxfernoanswertimeout < 1)) { ast_log(LOG_WARNING, "%s is not a valid atxfernoanswertimeout\n", var->value); atxfernoanswertimeout = DEFAULT_NOANSWER_TIMEOUT_ATTENDED_TRANSFER; } else atxfernoanswertimeout = atxfernoanswertimeout * 1000; } else if (!strcasecmp(var->name, "atxferloopdelay")) { - if ((sscanf(var->value, "%u", &atxferloopdelay) != 1)) { + if ((sscanf(var->value, "%30u", &atxferloopdelay) != 1)) { ast_log(LOG_WARNING, "%s is not a valid atxferloopdelay\n", var->value); atxferloopdelay = DEFAULT_ATXFER_LOOP_DELAY; } else @@ -3754,7 +3754,7 @@ } else if (!strcasecmp(var->name, "atxferdropcall")) { atxferdropcall = ast_true(var->value); } else if (!strcasecmp(var->name, "atxfercallbackretries")) { - if ((sscanf(var->value, "%u", &atxferloopdelay) != 1)) { + if ((sscanf(var->value, "%30u", &atxferloopdelay) != 1)) { ast_log(LOG_WARNING, "%s is not a valid atxfercallbackretries\n", var->value); atxfercallbackretries = DEFAULT_ATXFER_CALLBACK_RETRIES; } @@ -4361,7 +4361,7 @@ } if (!ast_strlen_zero(timeout)) { - sscanf(timeout, "%d", &to); + sscanf(timeout, "%30d", &to); } res = ast_masq_park_call(ch1, ch2, to, &parkExt); Index: main/http.c =================================================================== --- main/http.c (revision 211568) +++ main/http.c (revision 211569) @@ -137,10 +137,10 @@ while (sid && strcmp(sid->name, "mansession_id")) sid = sid->next; - - if (!sid || sscanf(sid->value, "%x", &mngid) != 1) + + if (!sid || sscanf(sid->value, "%30x", &mngid) != 1) return 0; - + return mngid; } Index: main/acl.c =================================================================== --- main/acl.c (revision 211568) +++ main/acl.c (revision 211569) @@ -291,7 +291,7 @@ nm++; if (!strchr(nm, '.')) { - if ((sscanf(nm, "%d", &x) == 1) && (x >= 0) && (x <= 32)) + if ((sscanf(nm, "%30d", &x) == 1) && (x >= 0) && (x <= 32)) ha->netmask.s_addr = htonl(0xFFFFFFFF << (32 - x)); else { ast_log(LOG_WARNING, "Invalid CIDR in %s\n", stuff); @@ -413,14 +413,14 @@ int ast_str2cos(const char *value, unsigned int *cos) { int fval; - - if (sscanf(value, "%d", &fval) == 1) { + + if (sscanf(value, "%30d", &fval) == 1) { if (fval < 8) { - *cos = fval; + *cos = fval; return 0; } } - + return -1; } @@ -429,7 +429,7 @@ int fval; unsigned int x; - if (sscanf(value, "%i", &fval) == 1) { + if (sscanf(value, "%30i", &fval) == 1) { *tos = fval & 0xFF; return 0; } Index: main/asterisk.c =================================================================== --- main/asterisk.c (revision 211568) +++ main/asterisk.c (revision 211569) @@ -1183,7 +1183,7 @@ if (!ast_strlen_zero(ast_config_AST_CTL_PERMISSIONS)) { int p1; mode_t p; - sscanf(ast_config_AST_CTL_PERMISSIONS, "%o", &p1); + sscanf(ast_config_AST_CTL_PERMISSIONS, "%30o", &p1); p = p1; if ((chmod(ast_config_AST_SOCKET, p)) < 0) ast_log(LOG_WARNING, "Unable to change file permissions of %s: %s\n", ast_config_AST_SOCKET, strerror(errno)); @@ -2052,10 +2052,10 @@ switch (*t) { case 'C': /* color */ t++; - if (sscanf(t, "%d;%d%n", &fgcolor, &bgcolor, &i) == 2) { + if (sscanf(t, "%30d;%30d%n", &fgcolor, &bgcolor, &i) == 2) { ast_str_append(&prompt, 0, "%s", term_color_code(term_code, fgcolor, bgcolor, sizeof(term_code))); t += i - 1; - } else if (sscanf(t, "%d%n", &fgcolor, &i) == 1) { + } else if (sscanf(t, "%30d%n", &fgcolor, &i) == 1) { ast_str_append(&prompt, 0, "%s", term_color_code(term_code, fgcolor, 0, sizeof(term_code))); t += i - 1; } @@ -2096,7 +2096,7 @@ #ifdef HAVE_GETLOADAVG case 'l': /* load avg */ t++; - if (sscanf(t, "%d", &which) == 1 && which > 0 && which <= 3) { + if (sscanf(t, "%30d", &which) == 1 && which > 0 && which <= 3) { double list[3]; getloadavg(list, 3); ast_str_append(&prompt, 0, "%.2f", list[which - 1]); @@ -2738,7 +2738,7 @@ /* debug level (-d at startup) */ } else if (!strcasecmp(v->name, "debug")) { option_debug = 0; - if (sscanf(v->value, "%d", &option_debug) != 1) { + if (sscanf(v->value, "%30d", &option_debug) != 1) { option_debug = ast_true(v->value); } #if HAVE_WORKING_FORK @@ -2786,7 +2786,7 @@ } else if (!strcasecmp(v->name, "internal_timing")) { ast_set2_flag(&ast_options, ast_true(v->value), AST_OPT_FLAG_INTERNAL_TIMING); } else if (!strcasecmp(v->name, "maxcalls")) { - if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) { + if ((sscanf(v->value, "%30d", &option_maxcalls) != 1) || (option_maxcalls < 0)) { option_maxcalls = 0; } } else if (!strcasecmp(v->name, "maxload")) { @@ -2795,7 +2795,7 @@ if (getloadavg(test, 1) == -1) { ast_log(LOG_ERROR, "Cannot obtain load average on this system. 'maxload' option disabled.\n"); option_maxload = 0.0; - } else if ((sscanf(v->value, "%lf", &option_maxload) != 1) || (option_maxload < 0.0)) { + } else if ((sscanf(v->value, "%30lf", &option_maxload) != 1) || (option_maxload < 0.0)) { option_maxload = 0.0; } /* Set the maximum amount of open files */ @@ -2837,7 +2837,7 @@ } else if (!strcasecmp(v->name, "minmemfree")) { /* specify the minimum amount of free memory to retain. Asterisk should stop accepting new calls * if the amount of free memory falls below this watermark */ - if ((sscanf(v->value, "%ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) { + if ((sscanf(v->value, "%30ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) { option_minmemfree = 0; } #endif @@ -2852,7 +2852,7 @@ } for (v = ast_variable_browse(cfg, "compat"); v; v = v->next) { float version; - if (sscanf(v->value, "%f", &version) != 1) { + if (sscanf(v->value, "%30f", &version) != 1) { ast_log(LOG_WARNING, "Compatibility version for option '%s' is not a number: '%s'\n", v->name, v->value); continue; } @@ -2993,7 +2993,7 @@ switch (c) { #if defined(HAVE_SYSINFO) case 'e': - if ((sscanf(&optarg[1], "%ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) { + if ((sscanf(&optarg[1], "%30ld", &option_minmemfree) != 1) || (option_minmemfree < 0)) { option_minmemfree = 0; } break; @@ -3033,11 +3033,11 @@ ast_set_flag(&ast_options, AST_OPT_FLAG_MUTE); break; case 'M': - if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || (option_maxcalls < 0)) + if ((sscanf(optarg, "%30d", &option_maxcalls) != 1) || (option_maxcalls < 0)) option_maxcalls = 0; break; case 'L': - if ((sscanf(optarg, "%lf", &option_maxload) != 1) || (option_maxload < 0.0)) + if ((sscanf(optarg, "%30lf", &option_maxload) != 1) || (option_maxload < 0.0)) option_maxload = 0.0; break; case 'q': Index: main/dsp.c =================================================================== --- main/dsp.c (revision 211568) +++ main/dsp.c (revision 211569) @@ -1626,7 +1626,7 @@ const char *value; value = ast_variable_retrieve(cfg, "default", "silencethreshold"); - if (value && sscanf(value, "%d", &thresholds[THRESHOLD_SILENCE]) != 1) { + if (value && sscanf(value, "%30d", &thresholds[THRESHOLD_SILENCE]) != 1) { ast_log(LOG_WARNING, "%s: '%s' is not a valid silencethreshold value\n", CONFIG_FILE_NAME, value); thresholds[THRESHOLD_SILENCE] = 256; } else if (!value) Index: main/timing.c =================================================================== --- main/timing.c (revision 211568) +++ main/timing.c (revision 211569) @@ -229,7 +229,7 @@ if (a->argc == 3) { unsigned int rate; - if (sscanf(a->argv[2], "%u", &rate) == 1) { + if (sscanf(a->argv[2], "%30u", &rate) == 1) { test_rate = rate; } else { ast_cli(a->fd, "Invalid rate '%s', using default of %u\n", a->argv[2], test_rate); Index: main/frame.c =================================================================== --- main/frame.c (revision 211568) +++ main/frame.c (revision 211569) @@ -731,7 +731,7 @@ if (a->argc != 4) return CLI_SHOWUSAGE; - if (sscanf(a->argv[3],"%d",&codec) != 1) + if (sscanf(a->argv[3], "%30d", &codec) != 1) return CLI_SHOWUSAGE; for (i = 0; i < 32; i++) Index: main/indications.c =================================================================== --- main/indications.c (revision 211568) +++ main/indications.c (revision 211569) @@ -239,46 +239,46 @@ s++; else if (d.reppos == -1) d.reppos = d.nitems; - if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &duration) == 3) { + if (sscanf(s, "%30d+%30d/%30d", &freq1, &freq2, &duration) == 3) { /* f1+f2/time format */ - } else if (sscanf(s, "%d+%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "%30d+%30d", &freq1, &freq2) == 2) { /* f1+f2 format */ duration = 0; - } else if (sscanf(s, "%d*%d/%d", &freq1, &freq2, &duration) == 3) { + } else if (sscanf(s, "%30d*%30d/%30d", &freq1, &freq2, &duration) == 3) { /* f1*f2/time format */ modulate = 1; - } else if (sscanf(s, "%d*%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "%30d*%30d", &freq1, &freq2) == 2) { /* f1*f2 format */ duration = 0; modulate = 1; - } else if (sscanf(s, "%d/%d", &freq1, &duration) == 2) { + } else if (sscanf(s, "%30d/%30d", &freq1, &duration) == 2) { /* f1/time format */ freq2 = 0; - } else if (sscanf(s, "%d", &freq1) == 1) { + } else if (sscanf(s, "%30d", &freq1) == 1) { /* f1 format */ freq2 = 0; duration = 0; - } else if (sscanf(s, "M%d+M%d/%d", &freq1, &freq2, &duration) == 3) { + } else if (sscanf(s, "M%30d+M%30d/%30d", &freq1, &freq2, &duration) == 3) { /* Mf1+Mf2/time format */ midinote = 1; - } else if (sscanf(s, "M%d+M%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "M%30d+M%30d", &freq1, &freq2) == 2) { /* Mf1+Mf2 format */ duration = 0; midinote = 1; - } else if (sscanf(s, "M%d*M%d/%d", &freq1, &freq2, &duration) == 3) { + } else if (sscanf(s, "M%30d*M%30d/%30d", &freq1, &freq2, &duration) == 3) { /* Mf1*Mf2/time format */ modulate = 1; midinote = 1; - } else if (sscanf(s, "M%d*M%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "M%30d*M%30d", &freq1, &freq2) == 2) { /* Mf1*Mf2 format */ duration = 0; modulate = 1; midinote = 1; - } else if (sscanf(s, "M%d/%d", &freq1, &duration) == 2) { + } else if (sscanf(s, "M%30d/%30d", &freq1, &duration) == 2) { /* Mf1/time format */ freq2 = -1; midinote = 1; - } else if (sscanf(s, "M%d", &freq1) == 1) { + } else if (sscanf(s, "M%30d", &freq1) == 1) { /* Mf1 format */ freq2 = -1; duration = 0; Index: main/enum.c =================================================================== --- main/enum.c (revision 211568) +++ main/enum.c (revision 211569) @@ -114,7 +114,7 @@ strncpy(digits, number, 2); - if (!sscanf(digits, "%d", &cc)) { + if (!sscanf(digits, "%30d", &cc)) { return 0; } Index: main/cli.c =================================================================== --- main/cli.c (revision 211568) +++ main/cli.c (revision 211569) @@ -296,7 +296,7 @@ atleast = 1; if (argc != e->args + atleast && argc != e->args + atleast + 1) return CLI_SHOWUSAGE; - if (sscanf(argv[e->args + atleast - 1], "%d", &newlevel) != 1) + if (sscanf(argv[e->args + atleast - 1], "%30d", &newlevel) != 1) return CLI_SHOWUSAGE; if (argc == e->args + atleast + 1) { unsigned int debug = (*what == 'C'); Index: main/pbx.c =================================================================== --- main/pbx.c (revision 211568) +++ main/pbx.c (revision 211569) @@ -2388,7 +2388,7 @@ parens--; } else if (*var == ':' && parens == 0) { *var++ = '\0'; - sscanf(var, "%d:%d", offset, length); + sscanf(var, "%30d:%30d", offset, length); return 1; /* offset:length valid */ } } @@ -6220,7 +6220,7 @@ if (!strcasecmp(s, names[i])) return i+1; } - } else if (sscanf(s, "%d", &i) == 1 && i >= 1 && i <= max) { + } else if (sscanf(s, "%2d", &i) == 1 && i >= 1 && i <= max) { return i; } return 0; /* error return */ @@ -6307,11 +6307,11 @@ ast_log(LOG_WARNING, "Invalid time range. Assuming no restrictions based on time.\n"); return; } - if (sscanf(times, "%d:%d", &s1, &s2) != 2) { + if (sscanf(times, "%2d:%2d", &s1, &s2) != 2) { ast_log(LOG_WARNING, "%s isn't a time. Assuming no restrictions based on time.\n", times); return; } - if (sscanf(e, "%d:%d", &e1, &e2) != 2) { + if (sscanf(e, "%2d:%2d", &e1, &e2) != 2) { ast_log(LOG_WARNING, "%s isn't a time. Assuming no restrictions based on time.\n", e); return; } @@ -7850,7 +7850,7 @@ double waitsec; int waittime; - if (ast_strlen_zero(data) || (sscanf(data, "%lg", &waitsec) != 1) || (waitsec < 0)) + if (ast_strlen_zero(data) || (sscanf(data, "%30lg", &waitsec) != 1) || (waitsec < 0)) waitsec = -1; if (waitsec > -1) { waittime = waitsec * 1000.0; @@ -8578,7 +8578,7 @@ int res; if (ast_strlen_zero(condition)) { /* NULL or empty strings are false */ return 0; - } else if (sscanf(condition, "%d", &res) == 1) { /* Numbers are evaluated for truth */ + } else if (sscanf(condition, "%30d", &res) == 1) { /* Numbers are evaluated for truth */ return res; } else { /* Strings are true */ return 1; @@ -8992,7 +8992,7 @@ mode = -1; pri++; } - if (sscanf(pri, "%d", &ipri) != 1) { + if (sscanf(pri, "%30d", &ipri) != 1) { if ((ipri = ast_findlabel_extension(chan, context ? context : chan->context, exten ? exten : chan->exten, pri, chan->cid.cid_num)) < 1) { ast_log(LOG_WARNING, "Priority '%s' must be a number > 0, or valid label\n", pri); Index: main/dnsmgr.c =================================================================== --- main/dnsmgr.c (revision 211568) +++ main/dnsmgr.c (revision 211569) @@ -392,7 +392,7 @@ enabled = ast_true(enabled_value); } if ((interval_value = ast_variable_retrieve(config, "general", "refreshinterval"))) { - if (sscanf(interval_value, "%d", &interval) < 1) + if (sscanf(interval_value, "%30d", &interval) < 1) ast_log(LOG_WARNING, "Unable to convert '%s' to a numeric value.\n", interval_value); else if (interval < 0) ast_log(LOG_WARNING, "Invalid refresh interval '%d' specified, using default\n", interval); Index: main/netsock.c =================================================================== --- main/netsock.c (revision 211568) +++ main/netsock.c (revision 211569) @@ -280,7 +280,7 @@ unsigned int eid_int[6]; int x; - if (sscanf(s, "%x:%x:%x:%x:%x:%x", &eid_int[0], &eid_int[1], &eid_int[2], + if (sscanf(s, "%2x:%2x:%2x:%2x:%2x:%2x", &eid_int[0], &eid_int[1], &eid_int[2], &eid_int[3], &eid_int[4], &eid_int[5]) != 6) return -1; Index: res/res_config_sqlite.c =================================================================== --- res/res_config_sqlite.c (revision 211568) +++ res/res_config_sqlite.c (revision 211569) @@ -798,7 +798,7 @@ if (!tmp) { continue; } - if (sscanf(tmp, "%d", &scannum) == 1) { + if (sscanf(tmp, "%30d", &scannum) == 1) { ast_str_append(&sql1, 0, "%s,", col->name); ast_str_append(&sql2, 0, "%d,", scannum); } Index: res/res_config_curl.c =================================================================== --- res/res_config_curl.c (revision 211568) +++ res/res_config_curl.c (revision 211569) @@ -264,7 +264,7 @@ stringp = buffer; while (*stringp <= ' ') stringp++; - sscanf(stringp, "%d", &rowcount); + sscanf(stringp, "%30d", &rowcount); ast_free(buffer); ast_free(query); @@ -327,7 +327,7 @@ stringp = buffer; while (*stringp <= ' ') stringp++; - sscanf(stringp, "%d", &rowcount); + sscanf(stringp, "%30d", &rowcount); ast_free(buffer); ast_free(query); @@ -395,7 +395,7 @@ stringp = buffer; while (*stringp <= ' ') stringp++; - sscanf(stringp, "%d", &rowcount); + sscanf(stringp, "%30d", &rowcount); ast_free(buffer); ast_free(query); Index: res/res_smdi.c =================================================================== --- res/res_smdi.c (revision 211568) +++ res/res_smdi.c (revision 211569) @@ -906,7 +906,7 @@ baud_rate = B9600; } } else if (!strcasecmp(v->name, "msdstrip")) { - if (!sscanf(v->value, "%d", &msdstrip)) { + if (!sscanf(v->value, "%30d", &msdstrip)) { ast_log(LOG_NOTICE, "Invalid msdstrip value in %s (line %d), using default\n", config_file, v->lineno); msdstrip = 0; } else if (0 > msdstrip || msdstrip > 9) { @@ -914,7 +914,7 @@ msdstrip = 0; } } else if (!strcasecmp(v->name, "msgexpirytime")) { - if (!sscanf(v->value, "%ld", &msg_expiry)) { + if (!sscanf(v->value, "%30ld", &msg_expiry)) { ast_log(LOG_NOTICE, "Invalid msgexpirytime value in %s (line %d), using default\n", config_file, v->lineno); msg_expiry = SMDI_MSG_EXPIRY_TIME; } @@ -1047,7 +1047,7 @@ continue; } } else if (!strcasecmp(v->name, "pollinginterval")) { - if (sscanf(v->value, "%u", &mwi_monitor.polling_interval) != 1) { + if (sscanf(v->value, "%30u", &mwi_monitor.polling_interval) != 1) { ast_log(LOG_ERROR, "Invalid value for pollinginterval: %s\n", v->value); mwi_monitor.polling_interval = DEFAULT_POLLING_INTERVAL; } @@ -1168,7 +1168,7 @@ } if (!ast_strlen_zero(args.timeout)) { - if (sscanf(args.timeout, "%u", &timeout) != 1) { + if (sscanf(args.timeout, "%30u", &timeout) != 1) { ast_log(LOG_ERROR, "'%s' is not a valid timeout\n", args.timeout); timeout = SMDI_RETRIEVE_TIMEOUT_DEFAULT; } Index: res/res_agi.c =================================================================== --- res/res_agi.c (revision 211568) +++ res/res_agi.c (revision 211569) @@ -786,7 +786,7 @@ if (argc != 4) return RESULT_SHOWUSAGE; - if (sscanf(argv[3], "%d", &to) != 1) + if (sscanf(argv[3], "%30d", &to) != 1) return RESULT_SHOWUSAGE; res = ast_waitfordigit_full(chan, to, agi->audio, agi->ctrl); ast_agi_send(agi->fd, chan, "200 result=%d\n", res); @@ -905,7 +905,7 @@ stop = argv[4]; } - if ((argc > 5) && (sscanf(argv[5], "%d", &skipms) != 1)) { + if ((argc > 5) && (sscanf(argv[5], "%30d", &skipms) != 1)) { return RESULT_SHOWUSAGE; } @@ -941,7 +941,7 @@ if (argv[3]) edigits = argv[3]; - if ((argc > 4) && (sscanf(argv[4], "%ld", &sample_offset) != 1)) + if ((argc > 4) && (sscanf(argv[4], "%30ld", &sample_offset) != 1)) return RESULT_SHOWUSAGE; if (!(fs = ast_openstream(chan, argv[2], chan->language))) { @@ -1053,7 +1053,7 @@ if (argc < 4 || argc > 5) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%d", &num) != 1) + if (sscanf(argv[2], "%30d", &num) != 1) return RESULT_SHOWUSAGE; res = ast_say_number_full(chan, num, argv[3], chan->language, argc > 4 ? argv[4] : NULL, agi->audio, agi->ctrl); if (res == 1) @@ -1068,7 +1068,7 @@ if (argc != 4) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%d", &num) != 1) + if (sscanf(argv[2], "%30d", &num) != 1) return RESULT_SHOWUSAGE; res = ast_say_digit_str_full(chan, argv[2], argv[3], chan->language, agi->audio, agi->ctrl); @@ -1098,7 +1098,7 @@ if (argc != 4) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%d", &num) != 1) + if (sscanf(argv[2], "%30d", &num) != 1) return RESULT_SHOWUSAGE; res = ast_say_date(chan, num, argv[3], chan->language); if (res == 1) @@ -1113,7 +1113,7 @@ if (argc != 4) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%d", &num) != 1) + if (sscanf(argv[2], "%30d", &num) != 1) return RESULT_SHOWUSAGE; res = ast_say_time(chan, num, argv[3], chan->language); if (res == 1) @@ -1223,7 +1223,7 @@ if (argc != 3) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%d", &pri) != 1) { + if (sscanf(argv[2], "%30d", &pri) != 1) { if ((pri = ast_findlabel_extension(chan, chan->context, chan->exten, argv[2], chan->cid.cid_num)) < 1) return RESULT_SHOWUSAGE; } @@ -1254,7 +1254,7 @@ if (argc < 6) return RESULT_SHOWUSAGE; - if (sscanf(argv[5], "%d", &ms) != 1) + if (sscanf(argv[5], "%30d", &ms) != 1) return RESULT_SHOWUSAGE; if (argc > 6) @@ -1295,7 +1295,7 @@ /* backward compatibility, if no offset given, arg[6] would have been * caught below and taken to be a beep, else if it is a digit then it is a * offset */ - if ((argc >6) && (sscanf(argv[6], "%ld", &sample_offset) != 1) && (!strchr(argv[6], '='))) + if ((argc >6) && (sscanf(argv[6], "%30ld", &sample_offset) != 1) && (!strchr(argv[6], '='))) res = ast_streamfile(chan, "beep", chan->language); if ((argc > 7) && (!strchr(argv[7], '='))) @@ -1417,7 +1417,7 @@ if (argc != 3) return RESULT_SHOWUSAGE; - if (sscanf(argv[2], "%lf", &timeout) != 1) + if (sscanf(argv[2], "%30lf", &timeout) != 1) return RESULT_SHOWUSAGE; if (timeout < 0) timeout = 0; @@ -1605,7 +1605,7 @@ return RESULT_SHOWUSAGE; if (argv[2]) - sscanf(argv[2], "%d", &level); + sscanf(argv[2], "%30d", &level); ast_verb(level, "%s: %s\n", chan->data, argv[1]); Index: res/res_config_ldap.c =================================================================== --- res/res_config_ldap.c (revision 211568) +++ res/res_config_ldap.c (revision 211569) @@ -1408,7 +1408,7 @@ if ((s = ast_variable_retrieve(config, "_general", "url"))) { ast_copy_string(url, s, sizeof(url)); } else if ((host = ast_variable_retrieve(config, "_general", "host"))) { - if (!(s = ast_variable_retrieve(config, "_general", "port")) || sscanf(s, "%d", &port) != 1) { + if (!(s = ast_variable_retrieve(config, "_general", "port")) || sscanf(s, "%5d", &port) != 1 || port > 65535) { ast_log(LOG_NOTICE, "No directory port found, using 389 as default.\n"); port = 389; } @@ -1429,7 +1429,7 @@ if (!(s = ast_variable_retrieve(config, "_general", "version")) && !(s = ast_variable_retrieve(config, "_general", "protocol"))) { ast_log(LOG_NOTICE, "No explicit LDAP version found, using 3 as default.\n"); version = 3; - } else if (sscanf(s, "%d", &version) != 1 || version < 1 || version > 6) { + } else if (sscanf(s, "%30d", &version) != 1 || version < 1 || version > 6) { ast_log(LOG_WARNING, "Invalid LDAP version '%s', using 3 as default.\n", s); version = 3; } Index: res/ael/pval.c =================================================================== --- res/ael/pval.c (revision 211568) +++ res/ael/pval.c (revision 211569) @@ -860,12 +860,12 @@ p->filename, p->startline, p->endline, p->u1.str); warns++; } - if (sscanf(times, "%d:%d", &s1, &s2) != 2) { + if (sscanf(times, "%2d:%2d", &s1, &s2) != 2) { ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: The start time (%s) isn't quite right!\n", p->filename, p->startline, p->endline, times); warns++; } - if (sscanf(e, "%d:%d", &e1, &e2) != 2) { + if (sscanf(e, "%2d:%2d", &e1, &e2) != 2) { ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: The end time (%s) isn't quite right!\n", p->filename, p->startline, p->endline, times); warns++; @@ -957,7 +957,7 @@ c++; } /* Find the start */ - if (sscanf(day, "%d", &s) != 1) { + if (sscanf(day, "%2d", &s) != 1) { ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: The start day of month (%s) must be a number!\n", DAY->filename, DAY->startline, DAY->endline, day); warns++; @@ -969,7 +969,7 @@ } s--; if (c) { - if (sscanf(c, "%d", &e) != 1) { + if (sscanf(c, "%2d", &e) != 1) { ast_log(LOG_WARNING, "Warning: file %s, line %d-%d: The end day of month (%s) must be a number!\n", DAY->filename, DAY->startline, DAY->endline, c); warns++; Index: res/res_odbc.c =================================================================== --- res/res_odbc.c (revision 211568) +++ res/res_odbc.c (revision 211569) @@ -446,7 +446,7 @@ if (ast_false(v->value)) pooling = 1; } else if (!strcasecmp(v->name, "limit")) { - sscanf(v->value, "%d", &limit); + sscanf(v->value, "%30d", &limit); if (ast_true(v->value) && !limit) { ast_log(LOG_WARNING, "Limit should be a number, not a boolean: '%s'. Setting limit to 1023 for ODBC class '%s'.\n", v->value, cat); limit = 1023; @@ -456,7 +456,7 @@ break; } } else if (!strcasecmp(v->name, "idlecheck")) { - sscanf(v->value, "%d", &idlecheck); + sscanf(v->value, "%30u", &idlecheck); } else if (!strcasecmp(v->name, "enabled")) { enabled = ast_true(v->value); } else if (!strcasecmp(v->name, "pre-connect")) { Index: res/res_config_pgsql.c =================================================================== --- res/res_config_pgsql.c (revision 211568) +++ res/res_config_pgsql.c (revision 211569) @@ -162,10 +162,10 @@ if (strcmp(flen, "-1") == 0) { /* Some types, like chars, have the length stored in a different field */ flen = PQgetvalue(result, i, 5); - sscanf(flen, "%d", &column->len); + sscanf(flen, "%30d", &column->len); column->len -= 4; } else { - sscanf(flen, "%d", &column->len); + sscanf(flen, "%30d", &column->len); } column->name = (char *)column + sizeof(*column); column->type = (char *)column + sizeof(*column) + strlen(fname) + 1; Index: res/res_limit.c =================================================================== --- res/res_limit.c (revision 211568) +++ res/res_limit.c (revision 211569) @@ -178,7 +178,7 @@ return CLI_FAILURE; } - sscanf(a->argv[2], "%d", &x); + sscanf(a->argv[2], "%30d", &x); rlimit.rlim_max = rlimit.rlim_cur = x; setrlimit(resource, &rlimit); return CLI_SUCCESS; Index: res/snmp/agent.c =================================================================== --- res/snmp/agent.c (revision 211568) +++ res/snmp/agent.c (revision 211569) @@ -745,7 +745,7 @@ return (u_char *)version; } case ASTVERTAG: - sscanf(ast_get_version_num(), "%lu", &long_ret); + sscanf(ast_get_version_num(), "%30lu", &long_ret); return (u_char *)&long_ret; default: break; Index: res/res_http_post.c =================================================================== --- res/res_http_post.c (revision 211568) +++ res/res_http_post.c (revision 211569) @@ -176,7 +176,7 @@ continue; } - if (sscanf(var->value, "%lx", &ident) != 1) { + if (sscanf(var->value, "%30lx", &ident) != 1) { return ast_http_error((*status = 400), (*title = ast_strdup("Bad Request")), NULL, "The was an error parsing the request."); @@ -206,7 +206,7 @@ fprintf(f, "%s: %s\r\n", var->name, var->value); if (!strcasecmp(var->name, "Content-Length")) { - if ((sscanf(var->value, "%u", &content_len)) != 1) { + if ((sscanf(var->value, "%30u", &content_len)) != 1) { ast_log(LOG_ERROR, "Invalid Content-Length in POST request!\n"); fclose(f); Index: res/res_musiconhold.c =================================================================== --- res/res_musiconhold.c (revision 211568) +++ res/res_musiconhold.c (revision 211569) @@ -621,7 +621,7 @@ AST_STANDARD_APP_ARGS(args, parse); if (!ast_strlen_zero(args.duration)) { - if (sscanf(args.duration, "%d", &timeout) == 1) { + if (sscanf(args.duration, "%30d", &timeout) == 1) { timeout *= 1000; } else { ast_log(LOG_WARNING, "Invalid MusicOnHold duration '%s'. Will wait indefinitely.\n", args.duration); Index: codecs/codec_speex.c =================================================================== --- codecs/codec_speex.c (revision 211568) +++ codecs/codec_speex.c (revision 211569) @@ -396,7 +396,7 @@ } else ast_log(LOG_ERROR,"Error! Complexity must be 0-10\n"); } else if (!strcasecmp(var->name, "vbr_quality")) { - if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0 && res_f <= 10) { + if (sscanf(var->value, "%30f", &res_f) == 1 && res_f >= 0 && res_f <= 10) { ast_verb(3, "CODEC SPEEX: Setting VBR Quality to %f\n",res_f); vbr_quality = res_f; } else @@ -435,7 +435,7 @@ pp_agc = ast_true(var->value) ? 1 : 0; ast_verb(3, "CODEC SPEEX: Preprocessor AGC. [%s]\n",pp_agc ? "on" : "off"); } else if (!strcasecmp(var->name, "pp_agc_level")) { - if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { + if (sscanf(var->value, "%30f", &res_f) == 1 && res_f >= 0) { ast_verb(3, "CODEC SPEEX: Setting preprocessor AGC Level to %f\n",res_f); pp_agc_level = res_f; } else @@ -447,13 +447,13 @@ pp_dereverb = ast_true(var->value) ? 1 : 0; ast_verb(3, "CODEC SPEEX: Preprocessor Dereverb. [%s]\n",pp_dereverb ? "on" : "off"); } else if (!strcasecmp(var->name, "pp_dereverb_decay")) { - if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { + if (sscanf(var->value, "%30f", &res_f) == 1 && res_f >= 0) { ast_verb(3, "CODEC SPEEX: Setting preprocessor Dereverb Decay to %f\n",res_f); pp_dereverb_decay = res_f; } else ast_log(LOG_ERROR,"Error! Preprocessor Dereverb Decay must be >= 0\n"); } else if (!strcasecmp(var->name, "pp_dereverb_level")) { - if (sscanf(var->value, "%f", &res_f) == 1 && res_f >= 0) { + if (sscanf(var->value, "%30f", &res_f) == 1 && res_f >= 0) { ast_verb(3, "CODEC SPEEX: Setting preprocessor Dereverb Level to %f\n",res_f); pp_dereverb_level = res_f; } else Index: utils/extconf.c =================================================================== --- utils/extconf.c (revision 211568) +++ utils/extconf.c (revision 211569) @@ -3146,7 +3146,7 @@ if (!strcasecmp(s, names[i])) return i+1; } - } else if (sscanf(s, "%d", &i) == 1 && i >= 1 && i <= max) { + } else if (sscanf(s, "%30d", &i) == 1 && i >= 1 && i <= max) { return i; } return 0; /* error return */ @@ -3233,11 +3233,11 @@ ast_log(LOG_WARNING, "Invalid time range. Assuming no restrictions based on time.\n"); return; } - if (sscanf(times, "%d:%d", &s1, &s2) != 2) { + if (sscanf(times, "%2d:%2d", &s1, &s2) != 2) { ast_log(LOG_WARNING, "%s isn't a time. Assuming no restrictions based on time.\n", times); return; } - if (sscanf(e, "%d:%d", &e1, &e2) != 2) { + if (sscanf(e, "%2d:%2d", &e1, &e2) != 2) { ast_log(LOG_WARNING, "%s isn't a time. Assuming no restrictions based on time.\n", e); return; } @@ -5547,7 +5547,7 @@ parens--; } else if (*var == ':' && parens == 0) { *var++ = '\0'; - sscanf(var, "%d:%d", offset, length); + sscanf(var, "%30d:%30d", offset, length); return 1; /* offset:length valid */ } } @@ -5951,7 +5951,7 @@ ipri = lastpri; else ast_log(LOG_WARNING, "Can't use 'same' priority on the first entry!\n"); - } else if (sscanf(pri, "%d", &ipri) != 1 && + } else if (sscanf(pri, "%30d", &ipri) != 1 && (ipri = ast_findlabel_extension2(NULL, con, realext, pri, cidmatch)) < 1) { ast_log(LOG_WARNING, "Invalid priority/label '%s' at line %d\n", pri, v->lineno); ipri = 0; Index: utils/muted.c =================================================================== --- utils/muted.c (revision 211568) +++ utils/muted.c (revision 211569) @@ -156,7 +156,7 @@ } else if (!strcasecmp(buf, "smoothfade")) { smoothfade = 1; } else if (!strcasecmp(buf, "mutelevel")) { - if (val && (sscanf(val, "%d", &x) == 1) && (x > -1) && (x < 101)) { + if (val && (sscanf(val, "%3d", &x) == 1) && (x > -1) && (x < 101)) { mutelevel = x; } else fprintf(stderr, "mutelevel must be a number from 0 (most muted) to 100 (no mute) at line %d\n", lineno); @@ -216,7 +216,7 @@ if (ports) { *ports = '\0'; ports++; - if ((sscanf(ports, "%d", &port) != 1) || (port < 1) || (port > 65535)) { + if ((sscanf(ports, "%5d", &port) != 1) || (port < 1) || (port > 65535)) { fprintf(stderr, "'%s' is not a valid port number in the hostname\n", ports); return -1; } Index: utils/frame.c =================================================================== --- utils/frame.c (revision 211568) +++ utils/frame.c (revision 211569) @@ -355,7 +355,7 @@ double temp; char m, s, end; - k = sscanf(string, "%lf%c%c%c", &temp, &m, &s, &end); + k = sscanf(string, "%30lf%1c%1c%1c", &temp, &m, &s, &end); switch (k) { case 0: case EOF: case 4: @@ -396,7 +396,7 @@ double temp; char m, s, end; - k = sscanf(string, "%lf%c%c%c", &temp, &m, &s, &end); + k = sscanf(string, "%30lf%1c%1c%1c", &temp, &m, &s, &end); switch (k) { case 0: case EOF: case 2: case 4: @@ -476,7 +476,7 @@ if ((i = findoption( argcount, args, string)) > 0) { switch (sscanf(args[i] + 1 + strlen( string), - "%d%c", &temp, &c)) + "%30d%1c", &temp, &c)) { case 0: case EOF: case 2: argerrornum(args[i]+1, ME_NOINT); @@ -510,7 +510,7 @@ if ((i = findoption( argcount, args, string)) > 0) { - switch (sscanf(args[i] + 1 + strlen( string), "%lf%c", &temp, &end)) + switch (sscanf(args[i] + 1 + strlen( string), "%30lf%1c", &temp, &end)) { case 0: case EOF: case 2: argerrornum(args[i]+1, ME_NODOUBLE); @@ -545,7 +545,7 @@ if ((i = findoption( argcount, args, string)) > 0) { switch (sscanf(args[i] + 1 + strlen( string), - "%lf%c%c%c", &vol, &sbd, &sbb, &end)) + "%30lf%1c%1c%1c", &vol, &sbd, &sbb, &end)) { case 0: case EOF: case 4: weird = TRUE; @@ -593,7 +593,7 @@ char sbd, sbb, end; *result = 1.0; - k = sscanf(s, "%lf%c%c%c", result, &sbd, &sbb, &end); + k = sscanf(s, "%30lf%1c%1c%1c", result, &sbd, &sbb, &end); switch (k) { case 0: Index: cdr/cdr_pgsql.c =================================================================== --- cdr/cdr_pgsql.c (revision 211568) +++ cdr/cdr_pgsql.c (revision 211569) @@ -240,7 +240,7 @@ ast_cdr_getvar(cdr, cur->name, &value, buf, sizeof(buf), 0, 0); if (strncmp(cur->type, "int", 3) == 0) { long long whatever; - if (value && sscanf(value, "%lld", &whatever) == 1) { + if (value && sscanf(value, "%30lld", &whatever) == 1) { LENGTHEN_BUF2(25); lensql2 += snprintf(sql2 + lensql2, sizesql2 - lensql2, "%lld", whatever); } else { @@ -249,7 +249,7 @@ } } else if (strncmp(cur->type, "float", 5) == 0) { long double whatever; - if (value && sscanf(value, "%Lf", &whatever) == 1) { + if (value && sscanf(value, "%30Lf", &whatever) == 1) { LENGTHEN_BUF2(50); lensql2 += snprintf(sql2 + lensql2, sizesql2 - lensql2, "%30Lf", whatever); } else { @@ -509,7 +509,7 @@ ast_verb(4, "Found column '%s' of type '%s'\n", fname, ftype); cur = ast_calloc(1, sizeof(*cur) + strlen(fname) + strlen(ftype) + 2); if (cur) { - sscanf(flen, "%d", &cur->len); + sscanf(flen, "%30d", &cur->len); cur->name = (char *)cur + sizeof(*cur); cur->type = (char *)cur + sizeof(*cur) + strlen(fname) + 1; strcpy(cur->name, fname); Index: cdr/cdr_adaptive_odbc.c =================================================================== --- cdr/cdr_adaptive_odbc.c (revision 211568) +++ cdr/cdr_adaptive_odbc.c (revision 211569) @@ -419,7 +419,7 @@ case SQL_TYPE_DATE: { int year = 0, month = 0, day = 0; - if (sscanf(colptr, "%d-%d-%d", &year, &month, &day) != 3 || year <= 0 || + if (sscanf(colptr, "%4d-%2d-%2d", &year, &month, &day) != 3 || year <= 0 || month <= 0 || month > 12 || day < 0 || day > 31 || ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) || (month == 2 && year % 400 == 0 && day > 29) || @@ -441,7 +441,7 @@ case SQL_TYPE_TIME: { int hour = 0, minute = 0, second = 0; - int count = sscanf(colptr, "%d:%d:%d", &hour, &minute, &second); + int count = sscanf(colptr, "%2d:%2d:%2d", &hour, &minute, &second); if ((count != 2 && count != 3) || hour < 0 || hour > 23 || minute < 0 || minute > 59 || second < 0 || second > 59) { ast_log(LOG_WARNING, "CDR variable %s is not a valid time ('%s').\n", entry->name, colptr); @@ -457,7 +457,7 @@ case SQL_TIMESTAMP: { int year = 0, month = 0, day = 0, hour = 0, minute = 0, second = 0; - int count = sscanf(colptr, "%d-%d-%d %d:%d:%d", &year, &month, &day, &hour, &minute, &second); + int count = sscanf(colptr, "%4d-%2d-%2d %2d:%2d:%2d", &year, &month, &day, &hour, &minute, &second); if ((count != 3 && count != 5 && count != 6) || year <= 0 || month <= 0 || month > 12 || day < 0 || day > 31 || @@ -482,7 +482,7 @@ case SQL_INTEGER: { int integer = 0; - if (sscanf(colptr, "%d", &integer) != 1) { + if (sscanf(colptr, "%30d", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); break; } @@ -495,7 +495,7 @@ case SQL_BIGINT: { long long integer = 0; - if (sscanf(colptr, "%lld", &integer) != 1) { + if (sscanf(colptr, "%30lld", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); break; } @@ -508,7 +508,7 @@ case SQL_SMALLINT: { short integer = 0; - if (sscanf(colptr, "%hd", &integer) != 1) { + if (sscanf(colptr, "%30hd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); break; } @@ -521,7 +521,7 @@ case SQL_TINYINT: { char integer = 0; - if (sscanf(colptr, "%hhd", &integer) != 1) { + if (sscanf(colptr, "%30hhd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); break; } @@ -534,7 +534,7 @@ case SQL_BIT: { char integer = 0; - if (sscanf(colptr, "%hhd", &integer) != 1) { + if (sscanf(colptr, "%30hhd", &integer) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an integer.\n", entry->name); break; } @@ -550,7 +550,7 @@ case SQL_DECIMAL: { double number = 0.0; - if (sscanf(colptr, "%lf", &number) != 1) { + if (sscanf(colptr, "%30lf", &number) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name); break; } @@ -565,7 +565,7 @@ case SQL_DOUBLE: { double number = 0.0; - if (sscanf(colptr, "%lf", &number) != 1) { + if (sscanf(colptr, "%30lf", &number) != 1) { ast_log(LOG_WARNING, "CDR variable %s is not an numeric type.\n", entry->name); break; } Property changes on: . ___________________________________________________________________ Modified: trunk-merged - /trunk:1-137647,137680,137732,137780,137812,137848,137933,137987,138024,138028,138086,138124,138148,138155,138207,138260,138311,138361,138409,138412,138442,138473,138476,138479,138482,138518,138631,138687,138694,138775,138778-138780,138815,138845,138887,138943,139016,139083,139210,139215,139391,139457,139469,139554,139558,139563,139622,139624,139627,139662,139707,139770,139870,139915,139928,140053,140061,140169,140205,140301,140418,140422,140433,140489,140491,140563,140566,140606,140691-140692,140749,140752,140817,140824,140860,140887,140975,141039,141115,141157,141367,141504,141566,141682,141745,141807,141810,141868,141949,141995,141998,142064,142080,142219,142355,142359,142417,142475,142576,142676,142741,142745,142748,142866,142929,143031,143082,143141,143340,143405,143559,143609,143737,143837,143840,143843,143904,144025,144067,144149,144482,144523,144563,144569,144635,144678,144681,144829,144879,144949-144951,145076,145249,145428,145487,145553,145579,145606,145692,145752,145771,145959,145962,146198,146242,146312,146449,146514,146555,146644,146713,146802,146807,146875,146877,146883,146920,146923,146928,146970,147011,147050,147146,147194,147518,147592,147689,147807,147896,147899,147952,148000,148010,148112,148120,148144,148160,148200,148268,148373,148376,148471,148519,148612,148695,148738,148754,148868,148913,148917,148985,149040,149062,149131,149199,149201,149205,149208,149271,149279,149384,149487,149588,149637,149640,149687,149756,149918,149920,149981,150125,150207,150210,150257,150302,150305,150580,150635,150817,151101,151242-151243,151327,151371,151420,151428,151439,151464,151512,151600-151601,151906,152020,152060,152132,152134,152216,152287,152369,152442,152467,152536,152569,152605,152646,152689,152765,152812,152877,152887,152915,152920,152923,152969,152993,153122,153181,153362,153616,153650,153652,154023,154061,154072,154264,154268,154366,154428,154687,154919,155012,155121,155241,155244,155264,155324,155360,155395,155399,155467,155513,155516,155554,155671,155763,155804,155862-155863,156127,156166,156169,156228,156243,156290,156295,156299,156388,156612,156649,156690,156756,156817,156911,156962,157039,157041,157105,157164,157253,157302,157306,157366,157427,157496,157512,157562,157592,157600,157632,157639,157706,157743,157784,158062,158066,158072,158082,158133,158188,158230,158262,158265-158266,158374,158414,158449,158484,158540,158602,158606,158688,158694,158851,158857,158876,158924-158925,158992,159050,159093,159247,159276,159360,159402,159437,159475,159534,159554,159774,159818,159853,159898,159911,160004,160097,160170-160172,160208,160308,160319,160333,160481,160552,160555,160559,160626,160663,160699-160700,160760,160791,160854,160856,160945,161014,161147,161181,161252,161288,161349-161350,161427,161493,161721,161726,161787,161790,161830,161951,162016,162079,162140,162197,162205,162266,162271,162275,162291,162342,162355,162414,162466,162488,162583,162619,162656,162664,162667,162739,162805,162891,162922,162924-162930,162997,163081,163085,163089,163094,163168,163171,163213,163241,163254,163317,163384,163449,163512,163579,163612,163629,163642,163667,163670,163675,163762,163829,163873,163912,164203,164257,164268,164270,164272,164312,164349,164351,164419,164423,164519,164522,164525,164602,164606,164623,164648,164659,164675,164737,164798,164801,164807,164877,164882,164942,164978,165071,165142-165143,165180-165318,165320-165325,165327-165396,165398-165432,165434-165468,165470-165501,165503-165537,165539-165797,165799-165882,165884-165885,165887-165953,165955-165991,165993-166057,166059-166157,166159-166218,166220-166262,166264-166600,166602-166624,166626-166730,166732-166822,166824-166957,166959-167020,167022-167056,167058-167060,167062-167124,167126-167415,167417-167790,167793-167836,167838-167887,167889-167972,167974-168053,168055-168264,168266-168268,168270-168478,168480-168484,168486-168521,168523-168538,168540-168574,168576-168578,168580-168584,168586-168590,168592-168598,168600,168602-168608,168610-168618,168620-168625,168627-168635,168637,168640-168718,168720-168727,168729-168731,168733,168735-168758,168761-168897,168899-169115,169117-169152,169154-169276,169278-169324,169326,169328-169366,169368,169370-169437,169439-169613,169615-169797,169799-169865,169867-169909,169911-170006,170008-170111,170113-170306,170308-170350,170352-170456,170458-170459,170461-170462,170464-170497,170499-170901,170903-171042,171044-171080,171082-171120,171122,171124-171262,171264-171363,171365-171399,171402-171452,171454-171557,171559-171756,171758-171792,171794-171796,171798-171837,171839-171923,171926-171963,171965-172062,172064-172098,172100-172130,172133-172267,172269,172271-172317,172320-172369,172371-172439,172441-172547,172549-172639,172641-172777,172779-172815,172819-172854,172856-172889,172891-172928,172930-172962,172964-173027,173029-173046,173048-173129,173131-173168,173170-173248,173250-173502,173504-173770,173772-173857,173859-173900,173902-174045,174047-174644,174646-174704,174706-174885,174887-175057,175059-175088,175090-175343,175345-175407,175409-175410,175412-175474,175476-175507,175509-175511,175513-175596,175598-175622,175624-175635,175637-175654,175656-175662,175664-175698,175700-175782,175784-175800,175802-175826,175828-175982,175984-176137,176139-176355,176357-176359,176361-176512,176514-176555,176557-176626,176628-176630,176632-176638,176640-176668,176670-176705,176707-176770,176772-176840,176842-176868,176870-177160,177162-177286,177288-177290,177292-177319,177321-177450,177452-177505,177507-177696,177698-177851,177853-177854,177856-177883,177885-177912,177914-177987,177989-178021,178023-178026,178028-178029,178031-178060,178062-178106,178108-178299,178301-178572,178574-178604,178606,178608-178640,178642-178702,178705-178732,178734-178763,178765-178847,178849-178869,178871-178918,178920-179020,179022-179121,179123-179322,179324-179464,179466-179674,179676-179744,179746-179971,179973-180010,180012-180078,180080-180154,180156-180258,180260-180303,180305-180333,180335-180368,180370-180381,180383-180640,180642-180683,180685-180749,180751-180858,180860-180861,180863-180897,180899-180934,180936-180937,180939-180941,180943-181026,181029-181098,181100-181133,181135-181209,181211-181243,181245-181291,181293-181300,181302-181576,181578-181898,181900-182070,182072-182354,182356-182361,182363-182407,182409-182520,182522-182595,182597-182606,182608-182652,182654-182761,182763-182825,182827-182847,182849-182882,182884-182959,182961-182963,182965,182967-183031,183033-183123,183125-183147,183149-183195,183197-183238,183240-183311,183313-183344,183346-183510,183512-183552,183556-183651,183653-183830,183832-183994,183996-184042,184044-184150,184152-184218,184220-184627,184629-184638,184640-184676,184678-184692,184694-184797,184799-184800,184802-184985,184987-185298,185300-185431,185433-185531,185533-185580,185582-185603,185605-185703,185705-185740,185742-185776,185778-185911,185913-186020,186022-186057,186059-186077,186079-186296,186298-186381,186383-186524,186526-186536,186538-186562,186564-186565,186567-186619,186621-186623,186625-186652,186654-186686,186688-186927,186929-186952,186954-186956,186958-187035,187037-187049,187051-187104,187106-187107,187109-187137,187139-187178,187180-187209,187212-187268,187270-187359,187362-187425,187427-187490,187492-187555,187557-187559,187561-187633,187637-187672,187674-187679,187681-187713,187715-187769,187771,187774-187829,187831-187865,187867-187962,187964-188149,188151-188282,188285-188341,188343-188377,188379-188514,188516-188543,188545-188704,188706-188741,188743-188900,188902-188941,188943-189537,189540-189734,189736-189991,189993-189999,190001-190153,190155-190216,190218-190249,190251-190348,190350-190420,190422,190424-190453,190455-190456,190458-190483,190485-190515,190518-190544,190546-190576,190578-190585,190587-190625,190627-190734,190736-190796,190798-190864,190866-190946,190948-190988,190990,190992,190994-191027,191029-191115,191117-191139,191141-191174,191176,191178-191210,191212,191214-191220,191222-191299,191301-191331,191333-191410,191412-191417,191420-191422,191424-191629,191631-191738,191740-191780,191782-191784,191786-191847,191849-191883,191885-191918,191920-191996,191998-192031,192033-192095,192097-192361,192363-192426,192428-192589,192591-192699,192701-192735,192737-192771,192773-192852,192854-193273,193275-193348,193350-193458,193460,193462-193501,193503-193677,193679-193717,193719-193756,193758-193831,193833-193885,193887-194059,194061-194100,194102-194282,194284-194429,194431-194476,194478,194480-194609,194611-194634,194636-194648,194650-194944,194946-194981,194983-195074,195076-195164,195166-195209,195211-195265,195267-195278,195280-195364,195366,195369-195588,195590-195762,195764-195797,195799-195948,195950-195991,195993-196071,196073-196113,196115-196186,196189-196226,196228-196245,196247-196267,196269,196271,196273-196307,196309-196343,196345-196376,196378-196380,196382-196416,196418-196455,196457-196487,196489-196519,196521-196553,196555-196584,196586-196621,196623-196724,196726-196757,196759-196791,196793-196892,196894-196906,196908-196944,196946-196947,196949-197024,197026-197124,197126-197188,197190-197264,197267-197334,197336-197337,197339-197373,197375-197405,197407-197408,197410-197430,197432-197527,197529-197534,197536-197569,197571-197615,197617-197700,197702-197737,197739,197741-197774,197776,197778-197823,197825-197827,197829-197860,197862-197925,197927-197958,197960-197995,197997-198082,198084-198087,198089-198138,198140-198181,198183-198216,198218-198433,198435-198437,198439-198441,198443-198469,198471-198497,198499,198501-198510,198512-198528,198531-198557,198559-198560,198562-198564,198566-198596,198598-198660,198662-198665,198667-198669,198671-198724,198726,198728,198730-198761,198763-198891,198893-198953,198955-198957,198959-199090,199092-199367,199369,199371,199373,199375,199377-199408,199410,199412,199414-199445,199447-199478,199480-199513,199515-199546,199548-199695,199697-199922,199924-199999,200001-200037,200039-200107,200109-200189,200191-200253,200255-200289,200291-200325,200327-200427,200429,200431-200476,200478-200518,200520-200583,200585-200586,200588-200619,200621-200655,200657-200689,200726,200764,200943,200946,200985,201056,201090,201223,201262,201344,201381,201445,201453,201458,201462,201531,201570,201610,201678,201783,201904,201994,202183,202258,202262,202337,202343,202410,202415,202417,202497,202672,202753,202761,202925,202967,203037,203116,203231,203258,203376,203381,203444,203672,203699,203702,203710,203721,203779,203802,203853,203909,204247,204301,204470,204475,204563,204710,204835,204948,205120,205151,205196,205216,205254,205291,205350,205412,205479,205532,205600,205696,205770,205776,205840,205878,205939,205985,206185,206280,206341,206386,206489,206567,206636,206702,206707,206768,206808,206868,206873,206877,206939,207029,207095,207156,207224,207255,207317,207361,207424,207680,207723,207854,207946,208113,208263,208314,208383,208388,208464,208542,208548,208588,208593,208749,208886,208924,209056,209098,209132,209197,209235,209256,209279,209317,209516,209554,209711,209760-209761,209835,209839,209887,210238,210564,210640,210817,210908,210914,210992,211040,211113,211232,211275,211347 + /trunk:1-137647,137680,137732,137780,137812,137848,137933,137987,138024,138028,138086,138124,138148,138155,138207,138260,138311,138361,138409,138412,138442,138473,138476,138479,138482,138518,138631,138687,138694,138775,138778-138780,138815,138845,138887,138943,139016,139083,139210,139215,139391,139457,139469,139554,139558,139563,139622,139624,139627,139662,139707,139770,139870,139915,139928,140053,140061,140169,140205,140301,140418,140422,140433,140489,140491,140563,140566,140606,140691-140692,140749,140752,140817,140824,140860,140887,140975,141039,141115,141157,141367,141504,141566,141682,141745,141807,141810,141868,141949,141995,141998,142064,142080,142219,142355,142359,142417,142475,142576,142676,142741,142745,142748,142866,142929,143031,143082,143141,143340,143405,143559,143609,143737,143837,143840,143843,143904,144025,144067,144149,144482,144523,144563,144569,144635,144678,144681,144829,144879,144949-144951,145076,145249,145428,145487,145553,145579,145606,145692,145752,145771,145959,145962,146198,146242,146312,146449,146514,146555,146644,146713,146802,146807,146875,146877,146883,146920,146923,146928,146970,147011,147050,147146,147194,147518,147592,147689,147807,147896,147899,147952,148000,148010,148112,148120,148144,148160,148200,148268,148373,148376,148471,148519,148612,148695,148738,148754,148868,148913,148917,148985,149040,149062,149131,149199,149201,149205,149208,149271,149279,149384,149487,149588,149637,149640,149687,149756,149918,149920,149981,150125,150207,150210,150257,150302,150305,150580,150635,150817,151101,151242-151243,151327,151371,151420,151428,151439,151464,151512,151600-151601,151906,152020,152060,152132,152134,152216,152287,152369,152442,152467,152536,152569,152605,152646,152689,152765,152812,152877,152887,152915,152920,152923,152969,152993,153122,153181,153362,153616,153650,153652,154023,154061,154072,154264,154268,154366,154428,154687,154919,155012,155121,155241,155244,155264,155324,155360,155395,155399,155467,155513,155516,155554,155671,155763,155804,155862-155863,156127,156166,156169,156228,156243,156290,156295,156299,156388,156612,156649,156690,156756,156817,156911,156962,157039,157041,157105,157164,157253,157302,157306,157366,157427,157496,157512,157562,157592,157600,157632,157639,157706,157743,157784,158062,158066,158072,158082,158133,158188,158230,158262,158265-158266,158374,158414,158449,158484,158540,158602,158606,158688,158694,158851,158857,158876,158924-158925,158992,159050,159093,159247,159276,159360,159402,159437,159475,159534,159554,159774,159818,159853,159898,159911,160004,160097,160170-160172,160208,160308,160319,160333,160481,160552,160555,160559,160626,160663,160699-160700,160760,160791,160854,160856,160945,161014,161147,161181,161252,161288,161349-161350,161427,161493,161721,161726,161787,161790,161830,161951,162016,162079,162140,162197,162205,162266,162271,162275,162291,162342,162355,162414,162466,162488,162583,162619,162656,162664,162667,162739,162805,162891,162922,162924-162930,162997,163081,163085,163089,163094,163168,163171,163213,163241,163254,163317,163384,163449,163512,163579,163612,163629,163642,163667,163670,163675,163762,163829,163873,163912,164203,164257,164268,164270,164272,164312,164349,164351,164419,164423,164519,164522,164525,164602,164606,164623,164648,164659,164675,164737,164798,164801,164807,164877,164882,164942,164978,165071,165142-165143,165180-165318,165320-165325,165327-165396,165398-165432,165434-165468,165470-165501,165503-165537,165539-165797,165799-165882,165884-165885,165887-165953,165955-165991,165993-166057,166059-166157,166159-166218,166220-166262,166264-166600,166602-166624,166626-166730,166732-166822,166824-166957,166959-167020,167022-167056,167058-167060,167062-167124,167126-167415,167417-167790,167793-167836,167838-167887,167889-167972,167974-168053,168055-168264,168266-168268,168270-168478,168480-168484,168486-168521,168523-168538,168540-168574,168576-168578,168580-168584,168586-168590,168592-168598,168600,168602-168608,168610-168618,168620-168625,168627-168635,168637,168640-168718,168720-168727,168729-168731,168733,168735-168758,168761-168897,168899-169115,169117-169152,169154-169276,169278-169324,169326,169328-169366,169368,169370-169437,169439-169613,169615-169797,169799-169865,169867-169909,169911-170006,170008-170111,170113-170306,170308-170350,170352-170456,170458-170459,170461-170462,170464-170497,170499-170901,170903-171042,171044-171080,171082-171120,171122,171124-171262,171264-171363,171365-171399,171402-171452,171454-171557,171559-171756,171758-171792,171794-171796,171798-171837,171839-171923,171926-171963,171965-172062,172064-172098,172100-172130,172133-172267,172269,172271-172317,172320-172369,172371-172439,172441-172547,172549-172639,172641-172777,172779-172815,172819-172854,172856-172889,172891-172928,172930-172962,172964-173027,173029-173046,173048-173129,173131-173168,173170-173248,173250-173502,173504-173770,173772-173857,173859-173900,173902-174045,174047-174644,174646-174704,174706-174885,174887-175057,175059-175088,175090-175343,175345-175407,175409-175410,175412-175474,175476-175507,175509-175511,175513-175596,175598-175622,175624-175635,175637-175654,175656-175662,175664-175698,175700-175782,175784-175800,175802-175826,175828-175982,175984-176137,176139-176355,176357-176359,176361-176512,176514-176555,176557-176626,176628-176630,176632-176638,176640-176668,176670-176705,176707-176770,176772-176840,176842-176868,176870-177160,177162-177286,177288-177290,177292-177319,177321-177450,177452-177505,177507-177696,177698-177851,177853-177854,177856-177883,177885-177912,177914-177987,177989-178021,178023-178026,178028-178029,178031-178060,178062-178106,178108-178299,178301-178572,178574-178604,178606,178608-178640,178642-178702,178705-178732,178734-178763,178765-178847,178849-178869,178871-178918,178920-179020,179022-179121,179123-179322,179324-179464,179466-179674,179676-179744,179746-179971,179973-180010,180012-180078,180080-180154,180156-180258,180260-180303,180305-180333,180335-180368,180370-180381,180383-180640,180642-180683,180685-180749,180751-180858,180860-180861,180863-180897,180899-180934,180936-180937,180939-180941,180943-181026,181029-181098,181100-181133,181135-181209,181211-181243,181245-181291,181293-181300,181302-181576,181578-181898,181900-182070,182072-182354,182356-182361,182363-182407,182409-182520,182522-182595,182597-182606,182608-182652,182654-182761,182763-182825,182827-182847,182849-182882,182884-182959,182961-182963,182965,182967-183031,183033-183123,183125-183147,183149-183195,183197-183238,183240-183311,183313-183344,183346-183510,183512-183552,183556-183651,183653-183830,183832-183994,183996-184042,184044-184150,184152-184218,184220-184627,184629-184638,184640-184676,184678-184692,184694-184797,184799-184800,184802-184985,184987-185298,185300-185431,185433-185531,185533-185580,185582-185603,185605-185703,185705-185740,185742-185776,185778-185911,185913-186020,186022-186057,186059-186077,186079-186296,186298-186381,186383-186524,186526-186536,186538-186562,186564-186565,186567-186619,186621-186623,186625-186652,186654-186686,186688-186927,186929-186952,186954-186956,186958-187035,187037-187049,187051-187104,187106-187107,187109-187137,187139-187178,187180-187209,187212-187268,187270-187359,187362-187425,187427-187490,187492-187555,187557-187559,187561-187633,187637-187672,187674-187679,187681-187713,187715-187769,187771,187774-187829,187831-187865,187867-187962,187964-188149,188151-188282,188285-188341,188343-188377,188379-188514,188516-188543,188545-188704,188706-188741,188743-188900,188902-188941,188943-189537,189540-189734,189736-189991,189993-189999,190001-190153,190155-190216,190218-190249,190251-190348,190350-190420,190422,190424-190453,190455-190456,190458-190483,190485-190515,190518-190544,190546-190576,190578-190585,190587-190625,190627-190734,190736-190796,190798-190864,190866-190946,190948-190988,190990,190992,190994-191027,191029-191115,191117-191139,191141-191174,191176,191178-191210,191212,191214-191220,191222-191299,191301-191331,191333-191410,191412-191417,191420-191422,191424-191629,191631-191738,191740-191780,191782-191784,191786-191847,191849-191883,191885-191918,191920-191996,191998-192031,192033-192095,192097-192361,192363-192426,192428-192589,192591-192699,192701-192735,192737-192771,192773-192852,192854-193273,193275-193348,193350-193458,193460,193462-193501,193503-193677,193679-193717,193719-193756,193758-193831,193833-193885,193887-194059,194061-194100,194102-194282,194284-194429,194431-194476,194478,194480-194609,194611-194634,194636-194648,194650-194944,194946-194981,194983-195074,195076-195164,195166-195209,195211-195265,195267-195278,195280-195364,195366,195369-195588,195590-195762,195764-195797,195799-195948,195950-195991,195993-196071,196073-196113,196115-196186,196189-196226,196228-196245,196247-196267,196269,196271,196273-196307,196309-196343,196345-196376,196378-196380,196382-196416,196418-196455,196457-196487,196489-196519,196521-196553,196555-196584,196586-196621,196623-196724,196726-196757,196759-196791,196793-196892,196894-196906,196908-196944,196946-196947,196949-197024,197026-197124,197126-197188,197190-197264,197267-197334,197336-197337,197339-197373,197375-197405,197407-197408,197410-197430,197432-197527,197529-197534,197536-197569,197571-197615,197617-197700,197702-197737,197739,197741-197774,197776,197778-197823,197825-197827,197829-197860,197862-197925,197927-197958,197960-197995,197997-198082,198084-198087,198089-198138,198140-198181,198183-198216,198218-198433,198435-198437,198439-198441,198443-198469,198471-198497,198499,198501-198510,198512-198528,198531-198557,198559-198560,198562-198564,198566-198596,198598-198660,198662-198665,198667-198669,198671-198724,198726,198728,198730-198761,198763-198891,198893-198953,198955-198957,198959-199090,199092-199367,199369,199371,199373,199375,199377-199408,199410,199412,199414-199445,199447-199478,199480-199513,199515-199546,199548-199695,199697-199922,199924-199999,200001-200037,200039-200107,200109-200189,200191-200253,200255-200289,200291-200325,200327-200427,200429,200431-200476,200478-200518,200520-200583,200585-200586,200588-200619,200621-200655,200657-200689,200726,200764,200943,200946,200985,201056,201090,201223,201262,201344,201381,201445,201453,201458,201462,201531,201570,201610,201678,201783,201904,201994,202183,202258,202262,202337,202343,202410,202415,202417,202497,202672,202753,202761,202925,202967,203037,203116,203231,203258,203376,203381,203444,203672,203699,203702,203710,203721,203779,203802,203853,203909,204247,204301,204470,204475,204563,204710,204835,204948,205120,205151,205196,205216,205254,205291,205350,205412,205479,205532,205600,205696,205770,205776,205840,205878,205939,205985,206185,206280,206341,206386,206489,206567,206636,206702,206707,206768,206808,206868,206873,206877,206939,207029,207095,207156,207224,207255,207317,207361,207424,207680,207723,207854,207946,208113,208263,208314,208383,208388,208464,208542,208548,208588,208593,208749,208886,208924,209056,209098,209132,209197,209235,209256,209279,209317,209516,209554,209711,209760-209761,209835,209839,209887,210238,210564,210640,210817,210908,210914,210992,211040,211113,211232,211275,211347,211539