mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-09 14:14:39 +02:00
Merge commit '570a4a0189946c2c983da41d37fdd67fa13266e7'
* commit '570a4a0189946c2c983da41d37fdd67fa13266e7': avidec: use sensible error codes instead of -1 Conflicts: libavformat/avidec.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
b4a7f4d018
@ -140,7 +140,7 @@ static int get_riff(AVFormatContext *s, AVIOContext *pb)
|
|||||||
if(!memcmp(header, avi_headers[i], 8))
|
if(!memcmp(header, avi_headers[i], 8))
|
||||||
break;
|
break;
|
||||||
if(!avi_headers[i][0])
|
if(!avi_headers[i][0])
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if(header[7] == 0x19)
|
if(header[7] == 0x19)
|
||||||
av_log(s, AV_LOG_INFO, "This file has been generated by a totally broken muxer.\n");
|
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);
|
longs_pre_entry,index_type, entries_in_use, chunk_id, base);
|
||||||
|
|
||||||
if(stream_id >= s->nb_streams || stream_id < 0)
|
if(stream_id >= s->nb_streams || stream_id < 0)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
st= s->streams[stream_id];
|
st= s->streams[stream_id];
|
||||||
ast = st->priv_data;
|
ast = st->priv_data;
|
||||||
|
|
||||||
if(index_sub_type)
|
if(index_sub_type)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
avio_rl32(pb);
|
avio_rl32(pb);
|
||||||
|
|
||||||
if(index_type && longs_pre_entry != 2)
|
if(index_type && longs_pre_entry != 2)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
if(index_type>1)
|
if(index_type>1)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if(filesize > 0 && base >= filesize){
|
if(filesize > 0 && base >= filesize){
|
||||||
av_log(s, AV_LOG_ERROR, "ODML index invalid\n");
|
av_log(s, AV_LOG_ERROR, "ODML index invalid\n");
|
||||||
if(base>>32 == (base & 0xFFFFFFFF) && (base & 0xFFFFFFFF) < filesize && filesize <= 0xFFFFFFFF)
|
if(base>>32 == (base & 0xFFFFFFFF) && (base & 0xFFFFFFFF) < filesize && filesize <= 0xFFFFFFFF)
|
||||||
base &= 0xFFFFFFFF;
|
base &= 0xFFFFFFFF;
|
||||||
else
|
else
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(i=0; i<entries_in_use; i++){
|
for(i=0; i<entries_in_use; i++){
|
||||||
@ -201,7 +201,7 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
|||||||
av_log(s, AV_LOG_ERROR, "pos:%"PRId64", len:%X\n", pos, len);
|
av_log(s, AV_LOG_ERROR, "pos:%"PRId64", len:%X\n", pos, len);
|
||||||
#endif
|
#endif
|
||||||
if(url_feof(pb))
|
if(url_feof(pb))
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
if(last_pos == pos || pos == base - 8)
|
if(last_pos == pos || pos == base - 8)
|
||||||
avi->non_interleaved= 1;
|
avi->non_interleaved= 1;
|
||||||
@ -218,13 +218,13 @@ static int read_braindead_odml_indx(AVFormatContext *s, int frame_num){
|
|||||||
duration = avio_rl32(pb);
|
duration = avio_rl32(pb);
|
||||||
|
|
||||||
if(url_feof(pb))
|
if(url_feof(pb))
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
pos = avio_tell(pb);
|
pos = avio_tell(pb);
|
||||||
|
|
||||||
if(avi->odml_depth > MAX_ODML_DEPTH){
|
if(avi->odml_depth > MAX_ODML_DEPTH){
|
||||||
av_log(s, AV_LOG_ERROR, "Too deeply nested ODML indexes\n");
|
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)
|
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);
|
size += (size & 1);
|
||||||
|
|
||||||
if (size == UINT_MAX)
|
if (size == UINT_MAX)
|
||||||
return -1;
|
return AVERROR(EINVAL);
|
||||||
value = av_malloc(size+1);
|
value = av_malloc(size+1);
|
||||||
if (!value)
|
if (!value)
|
||||||
return -1;
|
return AVERROR(ENOMEM);
|
||||||
avio_read(pb, value, size);
|
avio_read(pb, value, size);
|
||||||
value[size]=0;
|
value[size]=0;
|
||||||
|
|
||||||
@ -367,8 +367,9 @@ static int avi_read_header(AVFormatContext *s)
|
|||||||
|
|
||||||
avi->stream_index= -1;
|
avi->stream_index= -1;
|
||||||
|
|
||||||
if (get_riff(s, pb) < 0)
|
ret = get_riff(s, pb);
|
||||||
return -1;
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
av_log(avi, AV_LOG_DEBUG, "use odml:%d\n", avi->use_odml);
|
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;
|
break;
|
||||||
case MKTAG('s', 't', 'r', 'n'):
|
case MKTAG('s', 't', 'r', 'n'):
|
||||||
if(s->nb_streams){
|
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;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@ -784,7 +787,7 @@ static int avi_read_header(AVFormatContext *s)
|
|||||||
/* check stream number */
|
/* check stream number */
|
||||||
if (stream_index != s->nb_streams - 1) {
|
if (stream_index != s->nb_streams - 1) {
|
||||||
fail:
|
fail:
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!avi->index_loaded && pb->seekable)
|
if(!avi->index_loaded && pb->seekable)
|
||||||
@ -1262,7 +1265,7 @@ static int avi_read_idx1(AVFormatContext *s, int size)
|
|||||||
|
|
||||||
nb_index_entries = size / 16;
|
nb_index_entries = size / 16;
|
||||||
if (nb_index_entries <= 0)
|
if (nb_index_entries <= 0)
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
|
|
||||||
idx1_pos = avio_tell(pb);
|
idx1_pos = avio_tell(pb);
|
||||||
avio_seek(pb, avi->movi_list+4, SEEK_SET);
|
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);
|
av_dlog(s, "%d cum_len=%"PRId64"\n", len, ast->cum_len);
|
||||||
|
|
||||||
|
|
||||||
// even if we have only a single stream, we should
|
// even if we have only a single stream, we should
|
||||||
// switch to non-interleaved to get correct timestamps
|
// switch to non-interleaved to get correct timestamps
|
||||||
if(last_pos == pos)
|
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),
|
timestamp * FFMAX(ast->sample_size, 1),
|
||||||
st->index_entries[0].timestamp,
|
st->index_entries[0].timestamp,
|
||||||
st->index_entries[st->nb_index_entries - 1].timestamp);
|
st->index_entries[st->nb_index_entries - 1].timestamp);
|
||||||
return -1;
|
return AVERROR_INVALIDDATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* find the position */
|
/* find the position */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user