Skip to content

Commit 4c0faba

Browse files
committed
issue #65: make sure DSDIFF files have a valid channel count
1 parent 8948be9 commit 4c0faba

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

Diff for: cli/dsdiff.c

+8-2
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)