[Python-Dev] cpython (3.2): Issue #16335: Fix integer overflow in unicode-escape decoder.
Christian Heimes
christian at python.org
Mon Jan 21 11:29:45 CET 2013
Am 21.01.2013 10:46, schrieb serhiy.storchaka:
> http://hg.python.org/cpython/rev/7625866f8127
> changeset: 81622:7625866f8127
> branch: 3.2
> parent: 81610:260a9afd999a
> user: Serhiy Storchaka <storchaka at gmail.com>
> date: Mon Jan 21 11:38:00 2013 +0200
> summary:
> Issue #16335: Fix integer overflow in unicode-escape decoder.
>
> files:
> Lib/test/test_ucn.py | 16 ++++++++++++++++
> Objects/unicodeobject.c | 3 ++-
> 2 files changed, 18 insertions(+), 1 deletions(-)
>
>
> diff --git a/Lib/test/test_ucn.py b/Lib/test/test_ucn.py
> --- a/Lib/test/test_ucn.py
> +++ b/Lib/test/test_ucn.py
> @@ -8,6 +8,7 @@
> """#"
>
> import unittest
> +import _testcapi
>
> from test import support
>
> @@ -141,6 +142,21 @@
> str, b"\\NSPACE", 'unicode-escape', 'strict'
> )
>
> + @unittest.skipUnless(_testcapi.INT_MAX < _testcapi.PY_SSIZE_T_MAX,
> + "needs UINT_MAX < SIZE_MAX")
> + def test_issue16335(self):
> + # very very long bogus character name
> + try:
> + x = b'\\N{SPACE' + b'x' * (_testcapi.UINT_MAX + 1) + b'}'
> + except MemoryError:
> + raise unittest.SkipTest("not enough memory")
> + self.assertEqual(len(x), len(b'\\N{SPACE}') + (_testcapi.UINT_MAX + 1))
> + self.assertRaisesRegex(UnicodeError,
> + 'unknown Unicode character name',
> + x.decode, 'unicode-escape'
> + )
> +
> +
The test requires a lot of memory on my 64bit Linux box. Two of three
times the test process was killed by the Kernel's out of memory manager
although I have 8 GB physical RAM and 4 GB swap. Can you rewrite the
test to use less memory?
More information about the Python-Dev
mailing list