diff options
author | Guido van Rossum <guido@python.org> | 1997-05-20 15:59:35 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1997-05-20 15:59:35 (GMT) |
commit | b24c9ea51491e620f99b813cec1b015c968415bf (patch) | |
tree | 1dd620fe54b603b0b8a5e9e3353a0cb259d01408 /Modules/audioop.c | |
parent | 511f16357c7d206304d6f4a0864ecb3c947a8bf6 (diff) | |
download | cpython-b24c9ea51491e620f99b813cec1b015c968415bf.zip cpython-b24c9ea51491e620f99b813cec1b015c968415bf.tar.gz cpython-b24c9ea51491e620f99b813cec1b015c968415bf.tar.bz2 |
fixed ratecv to continue working if product of rates is bigger than 32 bits
(Sjoerd)
Diffstat (limited to 'Modules/audioop.c')
-rw-r--r-- | Modules/audioop.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/Modules/audioop.c b/Modules/audioop.c index 003f8af..471f851 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -945,6 +945,18 @@ audioop_lin2lin(self, args) return rv; } +static int +gcd(a, b) + int a, b; +{ + while (b > 0) { + int tmp = a % b; + a = b; + b = tmp; + } + return a; +} + static PyObject * audioop_ratecv(self, args) PyObject *self; @@ -977,6 +989,15 @@ audioop_ratecv(self, args) PyErr_SetString(AudioopError, "not a whole number of frames"); return NULL; } + if (inrate <= 0 || outrate <= 0) { + PyErr_SetString(AudioopError, "sampling rate not > 0"); + return NULL; + } + /* divide inrate and outrate by their greatest common divisor */ + d = gcd(inrate, outrate); + inrate /= d; + outrate /= d; + prev_i = malloc(nchannels * sizeof(int)); cur_i = malloc(nchannels * sizeof(int)); len /= size * nchannels; /* # of frames */ |