Fix for Trac #1573.
authorMonty <xiphmont@xiph.org>
Fri, 24 Jul 2009 01:51:10 +0000 (01:51 +0000)
committerMonty <xiphmont@xiph.org>
Fri, 24 Jul 2009 01:51:10 +0000 (01:51 +0000)
This is two bugs.  The first is that vorbisfile_example.c ignores an
error code and plows ahead blindly if libvorbisfile reports the
current bitstream section is bad (OV_EBADLINK).

The second is that retrying after the error crashes libvorbisfile due
to the unitialized state.

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

examples/vorbisfile_example.c
lib/block.c

index 728a9c5..4c27fa4 100644 (file)
@@ -70,7 +70,12 @@ int main(){
       /* EOF */
       eof=1;
     } else if (ret < 0) {
-      /* error in the stream.  Not a problem, just reporting it in
+      if(ret==OV_EBADLINK){
+        fprintf(stderr,"Corrupt bitstream section! Exiting.\n");
+        exit(1);
+      }
+
+      /* some other error in the stream.  Not a problem, just reporting it in
          case we (the app) cares.  In this case, we don't. */
     } else {
       /* we don't bother dealing with sample rate changes, etc, but
index 3bf8fba..693d40a 100644 (file)
@@ -232,9 +232,10 @@ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){
     v->analysisp=1;
   }else{
     /* finish the codebooks */
-    if(!ci->fullbooks){
+    if(!ci->fullbooks)
       ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks));
-      for(i=0;i<ci->books;i++){
+    for(i=0;i<ci->books;i++){
+      if(ci->book_param[i]!=NULL){
         if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i]))
           return -1;
         /* decode codebooks are now standalone after init */