diff options
Diffstat (limited to 'apps/codecs/libtremor/info.c')
-rw-r--r-- | apps/codecs/libtremor/info.c | 25 |
1 files changed, 1 insertions, 24 deletions
diff --git a/apps/codecs/libtremor/info.c b/apps/codecs/libtremor/info.c index e96dd88b70..cb3860bbff 100644 --- a/apps/codecs/libtremor/info.c +++ b/apps/codecs/libtremor/info.c | |||
@@ -138,34 +138,11 @@ static int _vorbis_unpack_info(vorbis_info *vi,oggpack_buffer *opb){ | |||
138 | } | 138 | } |
139 | 139 | ||
140 | static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ | 140 | static int _vorbis_unpack_comment(vorbis_comment *vc,oggpack_buffer *opb){ |
141 | int i; | ||
142 | int vendorlen=oggpack_read(opb,32); | 141 | int vendorlen=oggpack_read(opb,32); |
143 | if(vendorlen<0)goto err_out; | 142 | if(vendorlen<0)goto err_out; |
144 | vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); | 143 | vc->vendor=(char *)_ogg_calloc(vendorlen+1,1); |
145 | _v_readstring(opb,vc->vendor,vendorlen); | 144 | _v_readstring(opb,vc->vendor,vendorlen); |
146 | vc->comments=oggpack_read(opb,32); | 145 | vc->comments=0; |
147 | if(vc->comments<0)goto err_out; | ||
148 | vc->user_comments=(char **)_ogg_calloc(vc->comments+1,sizeof(*vc->user_comments)); | ||
149 | vc->comment_lengths=(int *)_ogg_calloc(vc->comments+1, sizeof(*vc->comment_lengths)); | ||
150 | |||
151 | for(i=0;i<vc->comments;i++){ | ||
152 | int len=oggpack_read(opb,32); | ||
153 | if(len<0)goto err_out; | ||
154 | vc->comment_lengths[i]=len; | ||
155 | if(len>10000){ /*truncate long comments rather then seg faulting*/ | ||
156 | vc->user_comments[i]=(char *)_ogg_calloc(10001,1); | ||
157 | _v_readstring(opb,vc->user_comments[i],10000); | ||
158 | /*just to be neat, consumed and discard the rest of the comment*/ | ||
159 | len-=10000; | ||
160 | while(len--) | ||
161 | oggpack_read(opb,8); | ||
162 | }else{ | ||
163 | vc->user_comments[i]=(char *)_ogg_calloc(len+1,1); | ||
164 | _v_readstring(opb,vc->user_comments[i],len); | ||
165 | } | ||
166 | } | ||
167 | if(oggpack_read(opb,1)!=1)goto err_out; /* EOP check */ | ||
168 | |||
169 | return(0); | 146 | return(0); |
170 | err_out: | 147 | err_out: |
171 | vorbis_comment_clear(vc); | 148 | vorbis_comment_clear(vc); |