[Python-checkins] r52225 - in python/branches/release25-maint: Lib/test/test_multibytecodec.py Misc/NEWS Modules/cjkcodecs/_codecs_iso2022.c
hyeshik.chang
python-checkins at python.org
Sun Oct 8 16:01:45 CEST 2006
Author: hyeshik.chang
Date: Sun Oct 8 16:01:45 2006
New Revision: 52225
Modified:
python/branches/release25-maint/Lib/test/test_multibytecodec.py
python/branches/release25-maint/Misc/NEWS
python/branches/release25-maint/Modules/cjkcodecs/_codecs_iso2022.c
Log:
Backport from trunk r52223:
Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
when encoding non-BMP unicode characters. (Submitted by Ray Chason)
Modified: python/branches/release25-maint/Lib/test/test_multibytecodec.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_multibytecodec.py (original)
+++ python/branches/release25-maint/Lib/test/test_multibytecodec.py Sun Oct 8 16:01:45 2006
@@ -208,6 +208,16 @@
e = u'\u3406'.encode(encoding)
self.failIf(filter(lambda x: x >= '\x80', e))
+ def test_bug1572832(self):
+ if sys.maxunicode >= 0x10000:
+ myunichr = unichr
+ else:
+ myunichr = lambda x: unichr(0xD7C0+(x>>10)) + unichr(0xDC00+(x&0x3FF))
+
+ for x in xrange(0x10000, 0x110000):
+ # Any ISO 2022 codec will cause the segfault
+ myunichr(x).encode('iso_2022_jp', 'ignore')
+
def test_main():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(Test_MultibyteCodec))
Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS (original)
+++ python/branches/release25-maint/Misc/NEWS Sun Oct 8 16:01:45 2006
@@ -49,6 +49,9 @@
Extension Modules
-----------------
+- Bug #1572832: fix a bug in ISO-2022 codecs which may cause segfault
+ when encoding non-BMP unicode characters.
+
- Bug #1556784: allow format strings longer than 127 characters in
datetime's strftime function.
Modified: python/branches/release25-maint/Modules/cjkcodecs/_codecs_iso2022.c
==============================================================================
--- python/branches/release25-maint/Modules/cjkcodecs/_codecs_iso2022.c (original)
+++ python/branches/release25-maint/Modules/cjkcodecs/_codecs_iso2022.c Sun Oct 8 16:01:45 2006
@@ -592,9 +592,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(cp949, coded, *data)
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(cp949, coded, *data)
+ if (!(coded & 0x8000))
+ return coded;
+ }
return MAP_UNMAPPABLE;
}
@@ -628,11 +630,13 @@
{
DBCHAR coded;
assert(*length == 1);
- if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
- return 0x2140;
- else TRYMAP_ENC(jisxcommon, coded, *data) {
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ if (*data == 0xff3c) /* F/W REVERSE SOLIDUS */
+ return 0x2140;
+ else TRYMAP_ENC(jisxcommon, coded, *data) {
+ if (!(coded & 0x8000))
+ return coded;
+ }
}
return MAP_UNMAPPABLE;
}
@@ -665,9 +669,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(jisxcommon, coded, *data) {
- if (coded & 0x8000)
- return coded & 0x7fff;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(jisxcommon, coded, *data) {
+ if (coded & 0x8000)
+ return coded & 0x7fff;
+ }
}
return MAP_UNMAPPABLE;
}
@@ -970,9 +976,11 @@
{
DBCHAR coded;
assert(*length == 1);
- TRYMAP_ENC(gbcommon, coded, *data) {
- if (!(coded & 0x8000))
- return coded;
+ if (*data < 0x10000) {
+ TRYMAP_ENC(gbcommon, coded, *data) {
+ if (!(coded & 0x8000))
+ return coded;
+ }
}
return MAP_UNMAPPABLE;
}
More information about the Python-checkins
mailing list