Skip to content

Commit 26cb47f

Browse files
committed
issue #30 issue #31 issue #32: no multiple format chunks in WAV or W64
1 parent 6f8bb34 commit 26cb47f

File tree

2 files changed

+12
-1
lines changed

2 files changed

+12
-1
lines changed

Diff for: cli/riff.c

+6-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ extern int debug_logging_mode;
5353

5454
int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, WavpackContext *wpc, WavpackConfig *config)
5555
{
56-
int is_rf64 = !strncmp (fourcc, "RF64", 4), got_ds64 = 0;
56+
int is_rf64 = !strncmp (fourcc, "RF64", 4), got_ds64 = 0, format_chunk = 0;
5757
int64_t total_samples = 0, infilesize;
5858
RiffChunkHeader riff_chunk_header;
5959
ChunkHeader chunk_header;
@@ -140,6 +140,11 @@ int ParseRiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpack
140140
else if (!strncmp (chunk_header.ckID, "fmt ", 4)) { // if it's the format chunk, we want to get some info out of there and
141141
int supported = TRUE, format; // make sure it's a .wav file we can handle
142142

143+
if (format_chunk++) {
144+
error_line ("%s is not a valid .WAV file!", infilename);
145+
return WAVPACK_SOFT_ERROR;
146+
}
147+
143148
if (chunk_header.ckSize < 16 || chunk_header.ckSize > sizeof (WaveHeader) ||
144149
!DoReadFile (infile, &WaveHeader, chunk_header.ckSize, &bcount) ||
145150
bcount != chunk_header.ckSize) {

Diff for: cli/wave64.c

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ int ParseWave64HeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
5353
Wave64ChunkHeader chunk_header;
5454
Wave64FileHeader filehdr;
5555
WaveHeader WaveHeader;
56+
int format_chunk = 0;
5657
uint32_t bcount;
5758

5859
infilesize = DoGetFileSize (infile);
@@ -104,6 +105,11 @@ int ParseWave64HeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
104105
if (!memcmp (chunk_header.ckID, fmt_guid, sizeof (fmt_guid))) {
105106
int supported = TRUE, format;
106107

108+
if (format_chunk++) {
109+
error_line ("%s is not a valid .W64 file!", infilename);
110+
return WAVPACK_SOFT_ERROR;
111+
}
112+
107113
chunk_header.ckSize = (chunk_header.ckSize + 7) & ~7L;
108114

109115
if (chunk_header.ckSize < 16 || chunk_header.ckSize > sizeof (WaveHeader) ||

0 commit comments

Comments
 (0)