Index: indications.c =================================================================== RCS file: /usr/cvsroot/asterisk/indications.c,v retrieving revision 1.30 diff -u -r1.30 indications.c --- indications.c 24 Oct 2005 20:12:05 -0000 1.30 +++ indications.c 25 Oct 2005 22:27:36 -0000 @@ -216,6 +216,7 @@ struct playtones_def d = { vol, -1, 0, 1, NULL}; char *stringp=NULL; char *separator; + char tmp[80]; if (!data) return -1; if (vol < 1) @@ -238,46 +239,46 @@ s++; else if (d.reppos == -1) d.reppos = d.nitems; - if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &time) == 3) { + if (sscanf(s, "%d+%d/%d", &freq1, &freq2, &time) == 3 && snprintf(tmp, sizeof(tmp), "%d+%d/%d", freq1, freq2, time) == strlen(s)) { /* f1+f2/time format */ - } else if (sscanf(s, "%d+%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "%d+%d", &freq1, &freq2) == 2 && snprintf(tmp, sizeof(tmp), "%d+%d", freq1, freq2) == strlen(s)) { /* f1+f2 format */ time = 0; - } else if (sscanf(s, "%d*%d/%d", &freq1, &freq2, &time) == 3) { + } else if (sscanf(s, "%d*%d/%d", &freq1, &freq2, &time) == 3 && snprintf(tmp, sizeof(tmp), "%d*%d/%d", freq1, freq2, time) == strlen(s)) { /* f1*f2/time format */ modulate = 1; - } else if (sscanf(s, "%d*%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "%d*%d", &freq1, &freq2) == 2 && snprintf(tmp, sizeof(tmp), "%d*%d", freq1, freq2) == strlen(s)) { /* f1*f2 format */ time = 0; modulate = 1; - } else if (sscanf(s, "%d/%d", &freq1, &time) == 2) { + } else if (sscanf(s, "%d/%d", &freq1, &time) == 2 && snprintf(tmp, sizeof(tmp), "%d/%d", freq1, time) == strlen(s)) { /* f1/time format */ freq2 = 0; - } else if (sscanf(s, "%d", &freq1) == 1) { + } else if (sscanf(s, "%d", &freq1) == 1 && snprintf(tmp, sizeof(tmp), "%d", freq1) == strlen(s)) { /* f1 format */ freq2 = 0; time = 0; - } else if (sscanf(s, "M%d+M%d/%d", &freq1, &freq2, &time) == 3) { + } else if (sscanf(s, "M%d+M%d/%d", &freq1, &freq2, &time) == 3 && snprintf(tmp, sizeof(tmp), "M%d+M%d/%d", freq1, freq2, time) == strlen(s)) { /* Mf1+Mf2/time format */ midinote = 1; - } else if (sscanf(s, "M%d+M%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "M%d+M%d", &freq1, &freq2) == 2 && snprintf(tmp, sizeof(tmp), "M%d+M%d", freq1, freq2) == strlen(s)) { /* Mf1+Mf2 format */ time = 0; midinote = 1; - } else if (sscanf(s, "M%d*M%d/%d", &freq1, &freq2, &time) == 3) { + } else if (sscanf(s, "M%d*M%d/%d", &freq1, &freq2, &time) == 3 && snprintf(tmp, sizeof(tmp), "M%d*M%d/%d", freq1, freq2, time) == strlen(s)) { /* Mf1*Mf2/time format */ modulate = 1; midinote = 1; - } else if (sscanf(s, "M%d*M%d", &freq1, &freq2) == 2) { + } else if (sscanf(s, "M%d*M%d", &freq1, &freq2) == 2 && snprintf(tmp, sizeof(tmp), "M%d*M%d", freq1, freq2) == strlen(s)) { /* Mf1*Mf2 format */ time = 0; modulate = 1; midinote = 1; - } else if (sscanf(s, "M%d/%d", &freq1, &time) == 2) { + } else if (sscanf(s, "M%d/%d", &freq1, &time) == 2 && snprintf(tmp, sizeof(tmp), "M%d/%d", freq1, time) == strlen(s)) { /* Mf1/time format */ freq2 = -1; midinote = 1; - } else if (sscanf(s, "M%d", &freq1) == 1) { + } else if (sscanf(s, "M%d", &freq1) == 1 && snprintf(tmp, sizeof(tmp), "M%d", freq1) == strlen(s)) { /* Mf1 format */ freq2 = -1; time = 0;