Index: lib/codebook.c =================================================================== --- lib/codebook.c (revision 13168) +++ lib/codebook.c (revision 13169) @@ -255,6 +255,7 @@ int vorbis_staticbook_unpack(oggpack_buf /* returns the number of bits ************************************************/ int vorbis_book_encode(codebook *book, int a, oggpack_buffer *b){ + if(a<0 || a>=book->c->entries)return(0); oggpack_write(b,book->codelist[a],book->c->lengthlist[a]); return(book->c->lengthlist[a]); } Index: lib/info.c =================================================================== --- lib/info.c (revision 13168) +++ lib/info.c (revision 13169) @@ -425,7 +425,7 @@ static int _vorbis_pack_info(oggpack_buf } static int _vorbis_pack_comment(oggpack_buffer *opb,vorbis_comment *vc){ - char temp[]="Xiph.Org libVorbis I 20070621"; + char temp[]="Xiph.Org libVorbis I 20070622"; int bytes = strlen(temp); /* preamble */ Index: lib/res0.c =================================================================== --- lib/res0.c (revision 13168) +++ lib/res0.c (revision 13169) @@ -336,7 +336,7 @@ static int local_book_besterror(codebook } } - { + if(best>-1){ float *ptr=book->valuelist+best*dim; for(i=0;i<dim;i++) *a++ -= *ptr++; @@ -355,10 +355,12 @@ static int _encodepart(oggpack_buffer *o int entry=local_book_besterror(book,vec+i*dim); #ifdef TRAIN_RES - acc[entry]++; + if(entry>0) + acc[entry]++; #endif - + bits+=vorbis_book_encode(book,entry,opb); + } return(bits);