diff -r 21d1571c0533 Lib/test/test_codeccallbacks.py --- a/Lib/test/test_codeccallbacks.py Wed Nov 26 12:11:40 2014 +0200 +++ b/Lib/test/test_codeccallbacks.py Wed Nov 26 13:24:19 2014 +0200 @@ -972,5 +972,33 @@ class CodecCallbackTest(unittest.TestCas data.decode(encoding, "test.replacing") +class OverflowTest(unittest.TestCase): + pass + +def make_overflow_test(encoding, errors, c): + if c <= '\xff': + charsize = 1 + elif c <= '\uffff': + charsize = 2 + else: + charsize = 4 + replsize = len(c.encode(encoding, errors)) + testsize = sys.maxsize // replsize + 1 + @test.support.cpython_only + @test.support.bigmemtest(testsize * charsize + sys.maxsize * 2, 1, + dry_run=False) + def testfunc(self, size): + s = c * testsize + with self.assertRaises((OverflowError, MemoryError)): + s.encode(encoding, errors) + testfunc.__name__ = 'test_%s' % errors + setattr(OverflowTest, testfunc.__name__, testfunc) + +make_overflow_test('ascii', 'backslashreplace', '\xff') +make_overflow_test('ascii', 'namereplace', '\ufbf9') +make_overflow_test('ascii', 'xmlcharrefreplace', '\xff') +make_overflow_test('utf-16le', 'surrogatepass', '\ud880') + + if __name__ == "__main__": unittest.main()