[pypy-commit] pypy stdlib-2.7.11: More state checking in audioop
alex_gaynor
pypy.commits at gmail.com
Sun Mar 20 19:51:13 EDT 2016
Author: Alex Gaynor <alex.gaynor at gmail.com>
Branch: stdlib-2.7.11
Changeset: r83210:71b26501a3db
Date: 2016-03-20 19:50 -0400
http://bitbucket.org/pypy/pypy/changeset/71b26501a3db/
Log: More state checking in audioop
diff --git a/lib_pypy/audioop.py b/lib_pypy/audioop.py
--- a/lib_pypy/audioop.py
+++ b/lib_pypy/audioop.py
@@ -23,6 +23,18 @@
raise error("not a whole number of frames")
+def _check_state(state):
+ if state is None:
+ valpred = 0
+ index = 0
+ else:
+ valpred, index = state
+ # XXX: len(stepsizeTable) = 89
+ if valpred >= 0x8000 or valpred < -0x8000 or index >= 89:
+ raise ValueError("bad state")
+ return (valpred, index)
+
+
def _sample_count(cp, size):
return len(cp) // size
@@ -485,7 +497,6 @@
return (result, (d, tuple(samps)))
-
def _get_lin_samples(cp, size):
for sample in _get_samples(cp, size):
if size == 1:
@@ -495,6 +506,7 @@
elif size == 4:
yield sample >> 16
+
def _put_lin_sample(result, size, i, sample):
if size == 1:
sample >>= 8
@@ -504,6 +516,7 @@
sample <<= 16
_put_sample(result, size, i, sample)
+
def lin2ulaw(cp, size):
_check_params(len(cp), size)
rv = ffi.new("unsigned char[]", _sample_count(cp, size))
@@ -542,8 +555,7 @@
def lin2adpcm(cp, size, state):
_check_params(len(cp), size)
- if state is None:
- state = (0, 0)
+ state = _check_state(state)
rv = ffi.new("unsigned char[]", len(cp) // size // 2)
state_ptr = ffi.new("int[]", state)
lib.lin2adcpm(rv, cp, len(cp), size, state_ptr)
@@ -552,15 +564,8 @@
def adpcm2lin(cp, size, state):
_check_size(size)
- if state is None:
- valpred = 0
- index = 0
- else:
- valpred, index = state
- # XXX: len(stepsizeTable) = 89
- if valpred >= 0x8000 or valpred < -0x8000 or index >= 89:
- raise ValueError("bad state")
+ state = _check_state(state)
rv = ffi.new("unsigned char[]", len(cp) * size * 2)
- state_ptr = ffi.new("int[]", [valpred, index])
+ state_ptr = ffi.new("int[]", state)
lib.adcpm2lin(rv, cp, len(cp), size, state_ptr)
return ffi.buffer(rv)[:], tuple(state_ptr)
More information about the pypy-commit
mailing list