iaxs[fr->callno]->last = fr->ts;
}
} else {
- ast_log(LOG_WARNING, "Datalen < 0?\n");
+ ast_log(LOG_ERROR, "Dropping malformed frame (datalen %d?)\n", f.datalen);
}
}
ast_mutex_unlock(&iaxsl[fr->callno]);
return 1;
}
f.datalen = res - sizeof(*vh);
+ if (f.datalen < 0) {
+ ast_log(LOG_ERROR, "Dropping malformed frame (datalen %d?)\n", f.datalen);
+ ast_variables_destroy(ies.vars);
+ ast_mutex_unlock(&iaxsl[fr->callno]);
+ return 1;
+ }
if (f.datalen)
f.data.ptr = thread->buf + sizeof(*vh);
else
}
f.datalen = res - sizeof(struct ast_iax2_mini_hdr);
if (f.datalen < 0) {
- ast_log(LOG_WARNING, "Datalen < 0?\n");
+ ast_log(LOG_ERROR, "Dropping malformed frame (datalen %d?)\n", f.datalen);
ast_variables_destroy(ies.vars);
ast_mutex_unlock(&iaxsl[fr->callno]);
return 1;
ast_frame_byteswap_be(&f);
} else
f.samples = 0;
+
iax_frame_wrap(fr, &f);
/* If this is our most recent packet, use it as our basis for timestamping */
if (fr->af.datalen) {
size_t copy_len = fr->af.datalen;
if (copy_len > fr->afdatalen) {
+ ast_assert(fr->af.datalen >= 0); /* Length should never be negative */
ast_log(LOG_ERROR, "Losing frame data because destination buffer size '%d' bytes not big enough for '%d' bytes in the frame\n",
(int) fr->afdatalen, (int) fr->af.datalen);
copy_len = fr->afdatalen;
{
struct iax_frame *fr;
+ ast_assert(datalen >= 0); /* Length should never be negative */
+
#if !defined(NO_FRAME_CACHE)
if (cacheable) {
struct iax_frames *iax_frames;