From daeffd2c08f8a04818b99e8342da79cf98ab730a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Fri, 3 Jan 2014 03:26:47 +0100 Subject: [PATCH] audioop: adpcm2lin() and lin2adpcm() now raises a TypeError instead of a SystemError if the state type is invalid. --- Lib/test/test_audioop.py | 5 +++++ Modules/audioop.c | 6 ++++++ 2 files changed, 11 insertions(+) diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py index d5075450e63..879adea2b8e 100644 --- a/Lib/test/test_audioop.py +++ b/Lib/test/test_audioop.py @@ -269,6 +269,11 @@ def test_lin2adpcm(self): self.assertEqual(audioop.lin2adpcm(b'\0' * w * 10, w, None), (b'\0' * 5, (0, 0))) + def test_invalid_adpcm_state(self): + # state must be a tuple or None, not an integer + self.assertRaises(TypeError, audioop.adpcm2lin, b'\0', 1, 555) + self.assertRaises(TypeError, audioop.lin2adpcm, b'\0', 1, 555) + def test_lin2alaw(self): self.assertEqual(audioop.lin2alaw(datas[1], 1), b'\xd5\x87\xa4\x24\xaa\x2a\x5a') diff --git a/Modules/audioop.c b/Modules/audioop.c index ae3ff060b47..bae4f2687e6 100644 --- a/Modules/audioop.c +++ b/Modules/audioop.c @@ -1525,6 +1525,9 @@ audioop_lin2adpcm(PyObject *self, PyObject *args) /* First time, it seems. Set defaults */ valpred = 0; index = 0; + } else if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state must be a tuple or None"); + goto exit; } else if (!PyArg_ParseTuple(state, "ii", &valpred, &index)) goto exit; @@ -1631,6 +1634,9 @@ audioop_adpcm2lin(PyObject *self, PyObject *args) /* First time, it seems. Set defaults */ valpred = 0; index = 0; + } else if (!PyTuple_Check(state)) { + PyErr_SetString(PyExc_TypeError, "state must be a tuple or None"); + goto exit; } else if (!PyArg_ParseTuple(state, "ii", &valpred, &index)) goto exit;