From: Monty Date: Fri, 24 Jul 2009 01:58:50 +0000 (+0000) Subject: More extensive / difficult to abuse version of #1573 fix. Makes it abunduntly clear... X-Git-Tag: v1.3.3~123 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c95f38e66380e0ab51617dc3b8709c7d083bfa51;p=platform%2Fupstream%2Flibvorbis.git More extensive / difficult to abuse version of #1573 fix. Makes it abunduntly clear that the DSP state is uninitialized. svn path=/trunk/vorbis/; revision=16330 --- diff --git a/lib/block.c b/lib/block.c index 693d40a..88d1e43 100644 --- a/lib/block.c +++ b/lib/block.c @@ -235,13 +235,13 @@ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){ if(!ci->fullbooks) ci->fullbooks=_ogg_calloc(ci->books,sizeof(*ci->fullbooks)); for(i=0;ibooks;i++){ - if(ci->book_param[i]!=NULL){ - if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i])) - return -1; + if(ci->book_param[i]==NULL) + goto abort_books; + if(vorbis_book_init_decode(ci->fullbooks+i,ci->book_param[i])) + goto abort_books; /* decode codebooks are now standalone after init */ - vorbis_staticbook_destroy(ci->book_param[i]); - ci->book_param[i]=NULL; - } + vorbis_staticbook_destroy(ci->book_param[i]); + ci->book_param[i]=NULL; } } @@ -279,6 +279,15 @@ static int _vds_shared_init(vorbis_dsp_state *v,vorbis_info *vi,int encp){ look(v,ci->residue_param[i]); return 0; + abort_books: + for(i=0;ibooks;i++){ + if(ci->book_param[i]!=NULL){ + vorbis_staticbook_destroy(ci->book_param[i]); + ci->book_param[i]=NULL; + } + } + vorbis_dsp_clear(v); + return -1; } /* arbitrary settings and spec-mandated numbers get filled in here */