[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