diff -r 454b97887c5a Lib/test/test_audioop.py --- a/Lib/test/test_audioop.py Fri Dec 02 19:49:02 2011 +0200 +++ b/Lib/test/test_audioop.py Fri Dec 30 14:29:36 2011 +0400 @@ -195,10 +195,15 @@ self.assertRaises(audioop.error, audioop.lin2lin, data, size, size2) self.assertRaises(audioop.error, audioop.ratecv, data, size, 1, 1, 1, state) self.assertRaises(audioop.error, audioop.lin2ulaw, data, size) + self.assertRaises(audioop.error, audioop.lin2alaw, data, size) + self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state) + + def test_wrongsize(self): + data = 'abc' + state = None + for size in (-1, 3, 5): self.assertRaises(audioop.error, audioop.ulaw2lin, data, size) - self.assertRaises(audioop.error, audioop.lin2alaw, data, size) self.assertRaises(audioop.error, audioop.alaw2lin, data, size) - self.assertRaises(audioop.error, audioop.lin2adpcm, data, size, state) self.assertRaises(audioop.error, audioop.adpcm2lin, data, size, state) def test_main(): diff -r 454b97887c5a Modules/audioop.c --- a/Modules/audioop.c Fri Dec 02 19:49:02 2011 +0200 +++ b/Modules/audioop.c Fri Dec 30 14:29:36 2011 +0400 @@ -1311,7 +1311,7 @@ &cp, &len, &size) ) return 0; - if (!audioop_check_parameters(len, size)) + if (!audioop_check_parameters(len*size, size)) return NULL; if (len > PY_SSIZE_T_MAX/size) { @@ -1380,7 +1380,7 @@ &cp, &len, &size) ) return 0; - if (!audioop_check_parameters(len, size)) + if (!audioop_check_parameters(len*size, size)) return NULL; if (len > PY_SSIZE_T_MAX/size) { @@ -1524,7 +1524,7 @@ &cp, &len, &size, &state) ) return 0; - if (!audioop_check_parameters(len, size)) + if (!audioop_check_parameters(len*size, size)) return NULL; /* Decode state, should have (value, step) */