formats: Restore previous fread() behavior

Some formats are able to handle short reads while others are not, so
restore the previous behavior for the format modules so that we don't
have spurious errors when playing back files.

ASTERISK-27232 #close
Reported by: Jens T.

Change-Id: Iab7f52b25a394f277566c8a2a4b15a692280a300
This commit is contained in:
Sean Bright
2017-09-05 11:05:48 -04:00
parent 9d79c39be2
commit 46bd1290a0
15 changed files with 87 additions and 161 deletions

View File

@@ -67,7 +67,7 @@ static int h263_open(struct ast_filestream *s)
static struct ast_frame *h263_read(struct ast_filestream *s, int *whennext)
{
int res;
size_t res;
uint32_t mark;
unsigned short len;
unsigned int ts;
@@ -85,15 +85,10 @@ static struct ast_frame *h263_read(struct ast_filestream *s, int *whennext)
}
AST_FRAME_SET_BUFFER(&s->fr, s->buf, AST_FRIENDLY_OFFSET, len);
if ((res = fread(s->fr.data.ptr, 1, s->fr.datalen, s->f)) != s->fr.datalen) {
if (feof(s->f)) {
if (res) {
ast_debug(3, "Incomplete frame data at end of %s file "
"(expected %d bytes, read %d)\n",
ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res);
}
} else {
ast_log(LOG_ERROR, "Error while reading %s file: %s\n",
ast_format_get_name(s->fr.subclass.format), strerror(errno));
if (res) {
ast_log(LOG_WARNING, "Short read of %s data (expected %d bytes, read %zu): %s\n",
ast_format_get_name(s->fr.subclass.format), s->fr.datalen, res,
strerror(errno));
}
return NULL;
}