diff --git a/libavformat/avidec.c b/libavformat/avidec.c index 7436b63cfb..2f248b1b2f 100644 --- a/libavformat/avidec.c +++ b/libavformat/avidec.c @@ -140,7 +140,7 @@ static int get_riff(AVFormatContext *s, AVIOContext *pb) if(!memcmp(header, avi_headers[i], 8)) break; if(!avi_headers[i][0]) - return -1; + return AVERROR_INVALIDDATA; if(header[7] == 0x19) av_log(s, AV_LOG_INFO, "This file has been generated by a totally broken muxer.\n"); @@ -168,26 +168,26 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ longs_pre_entry,index_type, entries_in_use, chunk_id, base); if(stream_id >= s->nb_streams || stream_id < 0) - return -1; + return AVERROR_INVALIDDATA; st= s->streams[stream_id]; ast = st->priv_data; if(index_sub_type) - return -1; + return AVERROR_INVALIDDATA; avio_rl32(pb); if(index_type && longs_pre_entry != 2) - return -1; + return AVERROR_INVALIDDATA; if(index_type>1) - return -1; + return AVERROR_INVALIDDATA; if(filesize > 0 && base >= filesize){ av_log(s, AV_LOG_ERROR, "ODML index invalid\n"); if(base>>32 == (base & 0xFFFFFFFF) && (base & 0xFFFFFFFF) < filesize && filesize <= 0xFFFFFFFF) base &= 0xFFFFFFFF; else - return -1; + return AVERROR_INVALIDDATA; } for(i=0; inon_interleaved= 1; @@ -218,13 +218,13 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){ duration = avio_rl32(pb); if(url_feof(pb)) - return -1; + return AVERROR_INVALIDDATA; pos = avio_tell(pb); if(avi->odml_depth > MAX_ODML_DEPTH){ av_log(s, AV_LOG_ERROR, "Too deeply nested ODML indexes\n"); - return -1; + return AVERROR_INVALIDDATA; } if(avio_seek(pb, offset+8, SEEK_SET) < 0) @@ -279,10 +279,10 @@ static int avi_read_tag(AVFormatContext *s, AVStream *st, uint32_t tag, uint32_t size += (size & 1); if (size == UINT_MAX) - return -1; + return AVERROR(EINVAL); value = av_malloc(size+1); if (!value) - return -1; + return AVERROR(ENOMEM); avio_read(pb, value, size); value[size]=0; @@ -367,8 +367,9 @@ static int avi_read_header(AVFormatContext *s) avi->stream_index= -1; - if (get_riff(s, pb) < 0) - return -1; + ret = get_riff(s, pb); + if (ret < 0) + return ret; av_log(avi, AV_LOG_DEBUG, "use odml:%d\n", avi->use_odml); @@ -761,7 +762,9 @@ static int avi_read_header(AVFormatContext *s) break; case MKTAG('s', 't', 'r', 'n'): if(s->nb_streams){ - avi_read_tag(s, s->streams[s->nb_streams-1], tag, size); + ret = avi_read_tag(s, s->streams[s->nb_streams-1], tag, size); + if (ret < 0) + return ret; break; } default: @@ -784,7 +787,7 @@ static int avi_read_header(AVFormatContext *s) /* check stream number */ if (stream_index != s->nb_streams - 1) { fail: - return -1; + return AVERROR_INVALIDDATA; } if(!avi->index_loaded && pb->seekable) @@ -1262,7 +1265,7 @@ static int avi_read_idx1(AVFormatContext *s, int size) nb_index_entries = size / 16; if (nb_index_entries <= 0) - return -1; + return AVERROR_INVALIDDATA; idx1_pos = avio_tell(pb); avio_seek(pb, avi->movi_list+4, SEEK_SET); @@ -1304,7 +1307,6 @@ static int avi_read_idx1(AVFormatContext *s, int size) av_dlog(s, "%d cum_len=%"PRId64"\n", len, ast->cum_len); - // even if we have only a single stream, we should // switch to non-interleaved to get correct timestamps if(last_pos == pos) @@ -1465,7 +1467,7 @@ static int avi_read_seek(AVFormatContext *s, int stream_index, int64_t timestamp timestamp * FFMAX(ast->sample_size, 1), st->index_entries[0].timestamp, st->index_entries[st->nb_index_entries - 1].timestamp); - return -1; + return AVERROR_INVALIDDATA; } /* find the position */