From: Victor Stinner Date: Fri, 3 Jan 2014 02:26:47 +0000 (+0100) Subject: audioop: adpcm2lin() and lin2adpcm() now raises a TypeError instead of a X-Git-Tag: v3.4.0b2~41 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=daeffd2c08f8a04818b99e8342da79cf98ab730a;p=python audioop: adpcm2lin() and lin2adpcm() now raises a TypeError instead of a SystemError if the state type is invalid. --- diff --git a/Lib/test/test_audioop.py b/Lib/test/test_audioop.py index d5075450e6..879adea2b8 100644 --- a/Lib/test/test_audioop.py +++ b/Lib/test/test_audioop.py @@ -269,6 +269,11 @@ class TestAudioop(unittest.TestCase): 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 ae3ff060b4..bae4f2687e 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;