Blame SOURCES/wavpack-0002-issue-28-do-not-overwrite-heap-on-corrupt-DSDIFF-fil.patch
|
|
613f70 |
From: David Bryant <david@wavpack.com>
|
|
|
613f70 |
Date: Sat, 10 Feb 2018 16:01:39 -0800
|
|
|
613f70 |
Subject: [PATCH] issue #28, do not overwrite heap on corrupt DSDIFF file
|
|
|
613f70 |
|
|
|
613f70 |
|
|
|
613f70 |
diff --git a/cli/dsdiff.c b/cli/dsdiff.c
|
|
|
613f70 |
index 410dc1c..c016df9 100644
|
|
|
613f70 |
--- a/cli/dsdiff.c
|
|
|
613f70 |
+++ b/cli/dsdiff.c
|
|
|
613f70 |
@@ -153,7 +153,17 @@ int ParseDsdiffHeaderConfig (FILE *infile, char *infilename, char *fourcc, Wavpa
|
|
|
613f70 |
error_line ("dsdiff file version = 0x%08x", version);
|
|
|
613f70 |
}
|
|
|
613f70 |
else if (!strncmp (dff_chunk_header.ckID, "PROP", 4)) {
|
|
|
613f70 |
- char *prop_chunk = malloc ((size_t) dff_chunk_header.ckDataSize);
|
|
|
613f70 |
+ char *prop_chunk;
|
|
|
613f70 |
+
|
|
|
613f70 |
+ if (dff_chunk_header.ckDataSize < 4 || dff_chunk_header.ckDataSize > 1024) {
|
|
|
613f70 |
+ error_line ("%s is not a valid .DFF file!", infilename);
|
|
|
613f70 |
+ return WAVPACK_SOFT_ERROR;
|
|
|
613f70 |
+ }
|
|
|
613f70 |
+
|
|
|
613f70 |
+ if (debug_logging_mode)
|
|
|
613f70 |
+ error_line ("got PROP chunk of %d bytes total", (int) dff_chunk_header.ckDataSize);
|
|
|
613f70 |
+
|
|
|
613f70 |
+ prop_chunk = malloc ((size_t) dff_chunk_header.ckDataSize);
|
|
|
613f70 |
|
|
|
613f70 |
if (!DoReadFile (infile, prop_chunk, (uint32_t) dff_chunk_header.ckDataSize, &bcount) ||
|
|
|
613f70 |
bcount != dff_chunk_header.ckDataSize) {
|