fix gsize=0 / -1 case (if(<24) goto fail) before it is not a good idea
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Mar 2007 03:36:17 +0000 (03:36 +0000)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Mar 2007 03:36:17 +0000 (03:36 +0000)
Originally committed as revision 8320 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavformat/asf.c

index 151a52a..a9531ef 100644 (file)
@@ -167,6 +167,16 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
         print_guid(&g);
         printf("  size=0x%"PRIx64"\n", gsize);
 #endif
         print_guid(&g);
         printf("  size=0x%"PRIx64"\n", gsize);
 #endif
+        if (!memcmp(&g, &data_header, sizeof(GUID))) {
+            asf->data_object_offset = url_ftell(pb);
+            // if not streaming, gsize is not unlimited (how?), and there is enough space in the file..
+            if (!(asf->hdr.flags & 0x01) && gsize >= 100) {
+                asf->data_object_size = gsize - 24;
+            } else {
+                asf->data_object_size = (uint64_t)-1;
+            }
+            break;
+        }
         if (gsize < 24)
             goto fail;
         if (!memcmp(&g, &file_header, sizeof(GUID))) {
         if (gsize < 24)
             goto fail;
         if (!memcmp(&g, &file_header, sizeof(GUID))) {
@@ -327,15 +337,6 @@ static int asf_read_header(AVFormatContext *s, AVFormatParameters *ap)
             }
             pos2 = url_ftell(pb);
             url_fskip(pb, gsize - (pos2 - pos1 + 24));
             }
             pos2 = url_ftell(pb);
             url_fskip(pb, gsize - (pos2 - pos1 + 24));
-        } else if (!memcmp(&g, &data_header, sizeof(GUID))) {
-            asf->data_object_offset = url_ftell(pb);
-            // if not streaming, gsize is not unlimited (how?), and there is enough space in the file..
-            if (!(asf->hdr.flags & 0x01) && gsize != (uint64_t)-1 && gsize >= 24) {
-                asf->data_object_size = gsize - 24;
-            } else {
-                asf->data_object_size = (uint64_t)-1;
-            }
-            break;
         } else if (!memcmp(&g, &comment_header, sizeof(GUID))) {
             int len1, len2, len3, len4, len5;
 
         } else if (!memcmp(&g, &comment_header, sizeof(GUID))) {
             int len1, len2, len3, len4, len5;