@@ -180,7 +180,7 @@ int ParseDsdiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
180180
181181 if (!strncmp (prop_chunk , "SND " , 4 )) {
182182 char * cptr = prop_chunk + 4 , * eptr = prop_chunk + dff_chunk_header .ckDataSize ;
183- uint16_t numChannels , chansSpecified , chanMask = 0 ;
183+ uint16_t numChannels = 0 , chansSpecified , chanMask = 0 ;
184184 uint32_t sampleRate ;
185185
186186 while (eptr - cptr >= sizeof (dff_chunk_header )) {
@@ -204,7 +204,7 @@ int ParseDsdiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
204204
205205 chansSpecified = (int )(dff_chunk_header .ckDataSize - sizeof (numChannels )) / 4 ;
206206
207- if (numChannels < chansSpecified || numChannels < 1 ) {
207+ if (numChannels < chansSpecified || numChannels < 1 || numChannels > 256 ) {
208208 error_line ("%s is not a valid .DFF file!" , infilename );
209209 free (prop_chunk );
210210 return WAVPACK_SOFT_ERROR ;
@@ -279,6 +279,12 @@ int ParseDsdiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
279279 free (prop_chunk );
280280 }
281281 else if (!strncmp (dff_chunk_header .ckID , "DSD " , 4 )) {
282+
283+ if (!config -> num_channels ) {
284+ error_line ("%s is not a valid .DFF file!" , infilename );
285+ return WAVPACK_SOFT_ERROR ;
286+ }
287+
282288 total_samples = dff_chunk_header .ckDataSize / config -> num_channels ;
283289 break ;
284290 }
0 commit comments