tag = avio_rl32(pb);
size = avio_rl32(pb);
+ if(size > avi->fsize){
+ av_log(s, AV_LOG_ERROR, "chunk size is too big during header parsing\n");
+ goto fail;
+ }
+
print_tag("tag", tag, size);
switch(tag) {
pal_size = FFMIN(pal_size, st->codec->extradata_size);
pal_src = st->codec->extradata + st->codec->extradata_size - pal_size;
-#if HAVE_BIGENDIAN
for (i = 0; i < pal_size/4; i++)
- ast->pal[i] = AV_RL32(pal_src+4*i);
-#else
- memcpy(ast->pal, pal_src, pal_size);
-#endif
+ ast->pal[i] = 0xFF<<24 | AV_RL32(pal_src+4*i);
ast->has_pal = 1;
}
avio_rl16(pb); //flags
for (; k <= last; k++)
- ast->pal[k] = avio_rb32(pb)>>8;// b + (g << 8) + (r << 16);
+ ast->pal[k] = 0xFF<<24 | avio_rb32(pb)>>8;// b + (g << 8) + (r << 16);
ast->has_pal= 1;
goto start_sync;
} else if( ((ast->prefix_count<5 || sync+9 > i) && d[2]<128 && d[3]<128) ||
return AVERROR_EOF;
best_ast = best_st->priv_data;
- best_ts = av_rescale_q(best_ts, (AVRational){FFMAX(1, best_ast->sample_size), AV_TIME_BASE}, best_st->time_base);
+ best_ts = best_ast->frame_offset;
if(best_ast->remaining)
i= av_index_search_timestamp(best_st, best_ts, AVSEEK_FLAG_ANY | AVSEEK_FLAG_BACKWARD);
else{
/* Read the entries and sort them in each stream component. */
for(i = 0; i < nb_index_entries; i++) {
+ if(url_feof(pb))
+ return -1;
+
tag = avio_rl32(pb);
flags = avio_rl32(pb);
pos = avio_rl32(pb);
av_dlog(s, "%d cum_len=%"PRId64"\n", len, ast->cum_len);
- if(url_feof(pb))
- return -1;
if(last_pos == pos)
avi->non_interleaved= 1;
if (ast) {
if (ast->sub_ctx) {
av_freep(&ast->sub_ctx->pb);
- av_close_input_file(ast->sub_ctx);
+ avformat_close_input(&ast->sub_ctx);
}
av_free(ast->sub_buffer);
av_free_packet(&ast->sub_pkt);