--- asterisk/callerid.c.orig 2004-11-22 13:01:33.000000000 +0000 +++ asterisk/callerid.c 2004-11-22 13:01:59.000000000 +0000 @@ -43,6 +43,7 @@ int flags; int sawflag; int len; + int eaten; }; @@ -132,6 +133,7 @@ cid->fskd.cont = 0; /* Digital PLL reset */ cid->fskd.x0 = 0.0; cid->fskd.state = 0; + cid->eaten = 0; memset(cid->name, 0, sizeof(cid->name)); memset(cid->number, 0, sizeof(cid->number)); cid->flags = CID_UNKNOWN_NAME | CID_UNKNOWN_NUMBER; @@ -249,6 +251,12 @@ ast_log(LOG_WARNING, "Out of memory\n"); return -1; } + cid->eaten += len; + if(cid->eaten > (8000 * 15)){ + /* we've eaten over 15 seconds of data */ + ast_log(LOG_ERROR, "Caller ID processed %d samples, giving up.\n", cid->eaten); + return -1; + } memset(buf, 0, 2 * len + cid->oldlen); memcpy(buf, cid->oldstuff, cid->oldlen); mylen += cid->oldlen/2;