Fix for Mozilla BZ #501279
authorMonty <xiphmont@xiph.org>
Tue, 7 Jul 2009 23:18:05 +0000 (23:18 +0000)
committerMonty <xiphmont@xiph.org>
Tue, 7 Jul 2009 23:18:05 +0000 (23:18 +0000)
Will need to review/patch Tremor as well, more thorough pattern review
of unpacking in the face of incomplete header packets in progress in
mainline as well.

svn path=/trunk/vorbis/; revision=16218

lib/res0.c

index 48caa27..7bdde0e 100644 (file)
@@ -208,16 +208,27 @@ vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){
   info->partitions=oggpack_read(opb,6)+1;
   info->groupbook=oggpack_read(opb,8);
 
+  /* check for premature EOP */
+  if(info->groupbook<0)goto errout;
+
   for(j=0;j<info->partitions;j++){
     int cascade=oggpack_read(opb,3);
-    if(oggpack_read(opb,1))
-      cascade|=(oggpack_read(opb,5)<<3);
+    int cflag=oggpack_read(opb,1);
+    if(cflag<0) goto errout;
+    if(cflag){
+      int c=oggpack_read(opb,5);
+      if(c<0) goto errout;
+      cascade|=(c<<3);
+    }
     info->secondstages[j]=cascade;
 
     acc+=icount(cascade);
   }
-  for(j=0;j<acc;j++)
-    info->booklist[j]=oggpack_read(opb,8);
+  for(j=0;j<acc;j++){
+    int book=oggpack_read(opb,8);
+    if(book<0) goto errout;
+    info->booklist[j]=book;
+  }
 
   if(info->groupbook>=ci->books)goto errout;
   for(j=0;j<acc;j++){