diff options
Diffstat (limited to 'apps/codecs')
-rw-r--r-- | apps/codecs/libtremor/floor1.c | 19 | ||||
-rw-r--r-- | apps/codecs/libtremor/res012.c | 4 |
2 files changed, 18 insertions, 5 deletions
diff --git a/apps/codecs/libtremor/floor1.c b/apps/codecs/libtremor/floor1.c index 0d3828c816..98118d7ac9 100644 --- a/apps/codecs/libtremor/floor1.c +++ b/apps/codecs/libtremor/floor1.c | |||
@@ -67,6 +67,10 @@ static inline int ilog(register unsigned int v){ | |||
67 | return(ret); | 67 | return(ret); |
68 | } | 68 | } |
69 | 69 | ||
70 | static int icomp(const void *a,const void *b){ | ||
71 | return(**(int **)a-**(int **)b); | ||
72 | } | ||
73 | |||
70 | static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ | 74 | static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ |
71 | codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; | 75 | codec_setup_info *ci=(codec_setup_info *)vi->codec_setup; |
72 | int j,k,count=0,maxclass=-1,rangebits; | 76 | int j,k,count=0,maxclass=-1,rangebits; |
@@ -110,6 +114,17 @@ static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ | |||
110 | info->postlist[0]=0; | 114 | info->postlist[0]=0; |
111 | info->postlist[1]=1<<rangebits; | 115 | info->postlist[1]=1<<rangebits; |
112 | 116 | ||
117 | /* don't allow repeated values in post list as they'd result in | ||
118 | zero-length segments */ | ||
119 | { | ||
120 | int *sortpointer[VIF_POSIT+2]; | ||
121 | for(j=0;j<count+2;j++)sortpointer[j]=info->postlist+j; | ||
122 | qsort(sortpointer,count+2,sizeof(*sortpointer),icomp); | ||
123 | |||
124 | for(j=1;j<count+2;j++) | ||
125 | if(*sortpointer[j-1]==*sortpointer[j])goto err_out; | ||
126 | } | ||
127 | |||
113 | return(info); | 128 | return(info); |
114 | 129 | ||
115 | err_out: | 130 | err_out: |
@@ -117,10 +132,6 @@ static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ | |||
117 | return(NULL); | 132 | return(NULL); |
118 | } | 133 | } |
119 | 134 | ||
120 | static int icomp(const void *a,const void *b){ | ||
121 | return(**(int **)a-**(int **)b); | ||
122 | } | ||
123 | |||
124 | static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,vorbis_info_mode *mi, | 135 | static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,vorbis_info_mode *mi, |
125 | vorbis_info_floor *in){ | 136 | vorbis_info_floor *in){ |
126 | 137 | ||
diff --git a/apps/codecs/libtremor/res012.c b/apps/codecs/libtremor/res012.c index a60cf7fa1e..bcddf97640 100644 --- a/apps/codecs/libtremor/res012.c +++ b/apps/codecs/libtremor/res012.c | |||
@@ -109,8 +109,10 @@ static vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){ | |||
109 | info->booklist[j]=oggpack_read(opb,8); | 109 | info->booklist[j]=oggpack_read(opb,8); |
110 | 110 | ||
111 | if(info->groupbook>=ci->books)goto errout; | 111 | if(info->groupbook>=ci->books)goto errout; |
112 | for(j=0;j<acc;j++) | 112 | for(j=0;j<acc;j++){ |
113 | if(info->booklist[j]>=ci->books)goto errout; | 113 | if(info->booklist[j]>=ci->books)goto errout; |
114 | if(ci->book_param[info->booklist[j]]->maptype==0)goto errout; | ||
115 | } | ||
114 | 116 | ||
115 | /* verify the phrasebook is not specifying an impossible or | 117 | /* verify the phrasebook is not specifying an impossible or |
116 | inconsistent partitioning scheme. */ | 118 | inconsistent partitioning scheme. */ |