diff options
Diffstat (limited to 'apps/codecs/libtremor/res012.c')
-rw-r--r-- | apps/codecs/libtremor/res012.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/apps/codecs/libtremor/res012.c b/apps/codecs/libtremor/res012.c index a42660a065..9abe75aed2 100644 --- a/apps/codecs/libtremor/res012.c +++ b/apps/codecs/libtremor/res012.c | |||
@@ -112,6 +112,20 @@ static vorbis_info_residue *res0_unpack(vorbis_info *vi,oggpack_buffer *opb){ | |||
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 | 114 | ||
115 | /* verify the phrasebook is not specifying an impossible or | ||
116 | inconsistent partitioning scheme. */ | ||
117 | { | ||
118 | int entries = ci->book_param[info->groupbook]->entries; | ||
119 | int dim = ci->book_param[info->groupbook]->dim; | ||
120 | int partvals = 1; | ||
121 | while(dim>0){ | ||
122 | partvals *= info->partitions; | ||
123 | if(partvals > entries) goto errout; | ||
124 | dim--; | ||
125 | } | ||
126 | if(partvals != entries) goto errout; | ||
127 | } | ||
128 | |||
115 | return(info); | 129 | return(info); |
116 | errout: | 130 | errout: |
117 | res0_free_info(info); | 131 | res0_free_info(info); |