diff --git a/libavformat/asf.c b/libavformat/asf.c
index 0ec73314efa6dad59feb4bf97b1f207db20fc120..df4de7c521404094d5e7daf238817fd8e03b0255 100644
--- a/libavformat/asf.c
+++ b/libavformat/asf.c
@@ -601,6 +601,10 @@ static int asf_read_packet(AVFormatContext *s, AVPacket *pkt)
                 assert(asf->packet_replic_size >= 8);
                 // it should be always at least 8 bytes - FIXME validate
                 asf->packet_obj_size = get_le32(pb);
+                if(asf->packet_obj_size >= (1<<24) || asf->packet_obj_size <= 0){
+                    av_log(s, AV_LOG_ERROR, "packet_obj_size invalid\n");
+                    continue;
+                }
                 asf->packet_frag_timestamp = get_le32(pb); // timestamp
                 if (asf->packet_replic_size > 8)
                     url_fskip(pb, asf->packet_replic_size - 8);