comparison libmpdemux/asfheader.c @ 18001:a2683ee7cb5a

fix descrambling of asf file, where signed buffer could cause erroneous values to be filled in descrable variables, add misssing check for one of these variables and restore sign of these variables as insurance that these checks will work even in such case.
author iive
date Thu, 30 Mar 2006 23:06:18 +0000
parents 2545bbd91450
children 11c9dfbe120c
comparison
equal deleted inserted replaced
18000:3b4e03cb518d 18001:a2683ee7cb5a
182 // find stream headers 182 // find stream headers
183 pos = 0; 183 pos = 0;
184 while ((pos = find_asf_guid(hdr, asf_stream_header_guid, pos, hdr_len)) >= 0) 184 while ((pos = find_asf_guid(hdr, asf_stream_header_guid, pos, hdr_len)) >= 0)
185 { 185 {
186 ASF_stream_header_t *streamh = (ASF_stream_header_t *)&hdr[pos]; 186 ASF_stream_header_t *streamh = (ASF_stream_header_t *)&hdr[pos];
187 char *buffer; 187 uint8_t *buffer;
188 pos += sizeof(ASF_stream_header_t); 188 pos += sizeof(ASF_stream_header_t);
189 if (pos > hdr_len) goto len_err_out; 189 if (pos > hdr_len) goto len_err_out;
190 le2me_ASF_stream_header_t(streamh); 190 le2me_ASF_stream_header_t(streamh);
191 mp_msg(MSGT_HEADER, MSGL_V, "stream type: %s\n", 191 mp_msg(MSGT_HEADER, MSGL_V, "stream type: %s\n",
192 asf_chunk_type(streamh->type)); 192 asf_chunk_type(streamh->type));
215 pos += streamh->stream_size; 215 pos += streamh->stream_size;
216 if (pos > hdr_len) goto len_err_out; 216 if (pos > hdr_len) goto len_err_out;
217 asf->scrambling_h=buffer[0]; 217 asf->scrambling_h=buffer[0];
218 asf->scrambling_w=(buffer[2]<<8)|buffer[1]; 218 asf->scrambling_w=(buffer[2]<<8)|buffer[1];
219 asf->scrambling_b=(buffer[4]<<8)|buffer[3]; 219 asf->scrambling_b=(buffer[4]<<8)|buffer[3];
220 asf->scrambling_w/=asf->scrambling_b; 220 if(asf->scrambling_b>0){
221 asf->scrambling_w/=asf->scrambling_b;
222 }
221 } else { 223 } else {
222 asf->scrambling_b=asf->scrambling_h=asf->scrambling_w=1; 224 asf->scrambling_b=asf->scrambling_h=asf->scrambling_w=1;
223 } 225 }
224 mp_msg(MSGT_HEADER,MSGL_V,"ASF: audio scrambling: %d x %d x %d\n",asf->scrambling_h,asf->scrambling_w,asf->scrambling_b); 226 mp_msg(MSGT_HEADER,MSGL_V,"ASF: audio scrambling: %d x %d x %d\n",asf->scrambling_h,asf->scrambling_w,asf->scrambling_b);
225 //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F; 227 //if(demuxer->audio->id==-1) demuxer->audio->id=streamh.stream_no & 0x7F;