summaryrefslogtreecommitdiff
path: root/apps/codecs/libtremor
diff options
context:
space:
mode:
authorNils Wallménius <nils@rockbox.org>2010-12-07 16:22:51 +0000
committerNils Wallménius <nils@rockbox.org>2010-12-07 16:22:51 +0000
commit0bfa899544d31ee2f34d149eb8bc17f89d7e9715 (patch)
treee53f73fe010bd59611e04753f52b933ecb6c6d9a /apps/codecs/libtremor
parent13eac3bd2f721b0b8c37af0f92351e3454c2bd9f (diff)
downloadrockbox-0bfa899544d31ee2f34d149eb8bc17f89d7e9715.tar.gz
rockbox-0bfa899544d31ee2f34d149eb8bc17f89d7e9715.zip
libtremor: merge upstream revision 17522 and 17523 adding more sanity checking.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28760 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/codecs/libtremor')
-rw-r--r--apps/codecs/libtremor/floor1.c19
-rw-r--r--apps/codecs/libtremor/res012.c4
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
70static int icomp(const void *a,const void *b){
71 return(**(int **)a-**(int **)b);
72}
73
70static vorbis_info_floor *floor1_unpack (vorbis_info *vi,oggpack_buffer *opb){ 74static 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
120static int icomp(const void *a,const void *b){
121 return(**(int **)a-**(int **)b);
122}
123
124static vorbis_look_floor *floor1_look(vorbis_dsp_state *vd,vorbis_info_mode *mi, 135static 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. */