Mercurial > mplayer.hg
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; |