comparison libmpdemux/demux_audio.c @ 9596:7b4a17c415fb

Same behaviour as old code for short headers
author rtognimp
date Sat, 15 Mar 2003 19:40:52 +0000
parents 3904b95fce8f
children a6bbab17a87f
comparison
equal deleted inserted replaced
9595:6bf482d797b1 9596:7b4a17c415fb
156 unsigned int chunk_type; 156 unsigned int chunk_type;
157 unsigned int chunk_size; 157 unsigned int chunk_size;
158 WAVEFORMATEX* w; 158 WAVEFORMATEX* w;
159 int l; 159 int l;
160 l = stream_read_dword_le(s); 160 l = stream_read_dword_le(s);
161 if(l < sizeof(WAVEFORMATEX)) { 161 if(l < 16) {
162 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] Bad wav header length: too short (%d)!!!\n",l); 162 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] Bad wav header length: too short (%d)!!!\n",l);
163 free_sh_audio(sh_audio); 163 free_sh_audio(sh_audio);
164 return 0; 164 return 0;
165 } 165 }
166 sh_audio->wf = w = (WAVEFORMATEX*)malloc(l); 166 sh_audio->wf = w = (WAVEFORMATEX*)malloc(l);
168 w->nChannels = sh_audio->channels = stream_read_word_le(s); 168 w->nChannels = sh_audio->channels = stream_read_word_le(s);
169 w->nSamplesPerSec = sh_audio->samplerate = stream_read_dword_le(s); 169 w->nSamplesPerSec = sh_audio->samplerate = stream_read_dword_le(s);
170 w->nAvgBytesPerSec = stream_read_dword_le(s); 170 w->nAvgBytesPerSec = stream_read_dword_le(s);
171 w->nBlockAlign = stream_read_word_le(s); 171 w->nBlockAlign = stream_read_word_le(s);
172 w->wBitsPerSample = sh_audio->samplesize = stream_read_word_le(s); 172 w->wBitsPerSample = sh_audio->samplesize = stream_read_word_le(s);
173 l -= 16;
174 if (l > 0) {
173 w->cbSize = stream_read_word_le(s); 175 w->cbSize = stream_read_word_le(s);
174 l -= sizeof(WAVEFORMATEX); 176 l -= 2;
175 if (w->cbSize > 0) 177 if (w->cbSize > 0)
176 if (l < w->cbSize) { 178 if (l < w->cbSize) {
177 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] truncated extradata (%d < %d)\n", 179 mp_msg(MSGT_DEMUX,MSGL_ERR,"[demux_audio] truncated extradata (%d < %d)\n",
178 l,w->cbSize); 180 l,w->cbSize);
179 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),l); 181 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),l);
180 l = 0; 182 l = 0;
181 } else { 183 } else {
182 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),w->cbSize); 184 stream_read(s,(char*)((char*)(w)+sizeof(WAVEFORMATEX)),w->cbSize);
183 l -= w->cbSize; 185 l -= w->cbSize;
184 } 186 }
187 }
185 188
186 if(verbose>0) print_wave_header(w); 189 if(verbose>0) print_wave_header(w);
187 if(l) 190 if(l)
188 stream_skip(s,l); 191 stream_skip(s,l);
189 do 192 do