1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
From: Helmut Grohne <helmut@subdivi.de>
Date: Sat, 11 Nov 2023 18:18:40 +0100
Subject: wav: reject 0 bits per sample to avoid division by zero
Bug: https://sourceforge.net/p/sox/bugs/349/
Bug-Debian: https://bugs.debian.org/1021135
---
src/testall.sh | 1 +
src/wav.c | 7 ++++++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/testall.sh b/src/testall.sh
index e739837..e1454c2 100755
--- a/src/testall.sh
+++ b/src/testall.sh
@@ -67,3 +67,4 @@ t voc
t vox -r 8130
t wav
t wve
+t wav -e gsm-full-rate
diff --git a/src/wav.c b/src/wav.c
index 2624632..c55b87e 100644
--- a/src/wav.c
+++ b/src/wav.c
@@ -506,7 +506,7 @@ static int startread(sox_format_t * ft)
unsigned short wChannels; /* number of channels */
uint32_t dwSamplesPerSecond; /* samples per second per channel */
uint32_t dwAvgBytesPerSec;/* estimate of bytes per second needed */
- uint16_t wBitsPerSample; /* bits per sample */
+ uint16_t wBitsPerSample = 0; /* bits per sample */
uint32_t wFmtSize;
uint16_t wExtSize = 0; /* extended field for non-PCM */
@@ -954,6 +954,11 @@ static int startread(sox_format_t * ft)
break;
default:
+ if (ft->encoding.bits_per_sample == 0)
+ {
+ lsx_fail_errno(ft, SOX_EHDR, "WAV file bits per sample is zero");
+ return SOX_EOF;
+ }
wav->numSamples = div_bits(qwDataLength, ft->encoding.bits_per_sample) / ft->signal.channels;
ft->signal.length = wav->numSamples * ft->signal.channels;
}
|