cpython: f63d34cd3714 (original) (raw)

Mercurial > cpython

changeset 86709:f63d34cd3714

Issue #18509: handle PyUnicode_Writer() error [#18509]

Victor Stinner victor.stinner@gmail.com
date Mon, 28 Oct 2013 23🔞39 +0100
parents 8c25b4515b3d
children 071809616a64
files Modules/cjkcodecs/_codecs_cn.c Modules/cjkcodecs/_codecs_hk.c Modules/cjkcodecs/_codecs_iso2022.c Modules/cjkcodecs/_codecs_jp.c Modules/cjkcodecs/_codecs_kr.c Modules/cjkcodecs/_codecs_tw.c Modules/cjkcodecs/cjkcodecs.h
diffstat 7 files changed, 102 insertions(+), 84 deletions(-)[+] [-] Modules/cjkcodecs/_codecs_cn.c 19 Modules/cjkcodecs/_codecs_hk.c 5 Modules/cjkcodecs/_codecs_iso2022.c 32 Modules/cjkcodecs/_codecs_jp.c 68 Modules/cjkcodecs/_codecs_kr.c 24 Modules/cjkcodecs/_codecs_tw.c 14 Modules/cjkcodecs/cjkcodecs.h 24

line wrap: on

line diff

--- a/Modules/cjkcodecs/_codecs_cn.c +++ b/Modules/cjkcodecs/_codecs_cn.c @@ -27,8 +27,10 @@ if ((dc1) == 0xa1 && (dc2) == 0xaa) OUTCHAR(0x2014); [](#l1.4) else if ((dc1) == 0xa8 && (dc2) == 0x44) OUTCHAR(0x2015); [](#l1.5) else if ((dc1) == 0xa1 && (dc2) == 0xa4) OUTCHAR(0x00b7); [](#l1.6)

#define GBK_ENCODE(code, assi) [](#l1.14) if ((code) == 0x2014) (assi) = 0xa1aa; [](#l1.15) @@ -74,6 +76,7 @@ DECODER(gb2312) { while (inleft > 0) { unsigned char c = **inbuf;

if (c < 0x80) { OUTCHAR(c); @@ -82,7 +85,8 @@ DECODER(gb2312) } REQUIRE_INBUF(2)

@@ -131,6 +135,7 @@ DECODER(gbk) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -236,6 +241,7 @@ DECODER(gb18030) { while (inleft > 0) { unsigned char c = INBYTE1, c2;

if (c < 0x80) { OUTCHAR(c); @@ -284,7 +290,8 @@ DECODER(gb18030) } GBK_DECODE(c, c2, writer)

NEXT_IN(2); @@ -372,6 +379,7 @@ DECODER(hz) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c == '~') { unsigned char c2 = INBYTE2; @@ -403,7 +411,8 @@ DECODER(hz) } else { /* GB mode */ REQUIRE_INBUF(2)

--- a/Modules/cjkcodecs/_codecs_hk.c +++ b/Modules/cjkcodecs/_codecs_hk.c @@ -118,13 +118,14 @@ DECODER(big5hkscs) REQUIRE_INBUF(2) if (0xc6 > c || c > 0xc8 || (c < 0xc7 && INBYTE2 < 0xa1)) {

--- a/Modules/cjkcodecs/_codecs_iso2022.c +++ b/Modules/cjkcodecs/_codecs_iso2022.c @@ -566,7 +566,7 @@ static Py_UCS4 ksx1001_decoder(const unsigned char *data) { Py_UCS4 u;

@@ -604,7 +604,7 @@ jisx0208_decoder(const unsigned char da Py_UCS4 u; if (data[0] == 0x21 && data[1] == 0x40) / F/W REVERSE SOLIDUS */ return 0xff3c;

@@ -643,7 +643,7 @@ static Py_UCS4 jisx0212_decoder(const unsigned char *data) { Py_UCS4 u;

@@ -697,11 +697,11 @@ jisx0213_2000_1_decoder(const unsigned c EMULATE_JISX0213_2000_DECODE_PLANE1(u, data[0], data[1]) else if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */ return 0xff3c;

@@ -727,11 +727,11 @@ jisx0213_2004_1_decoder(const unsigned c Py_UCS4 u; if (data[0] == 0x21 && data[1] == 0x40) /* F/W REVERSE SOLIDUS */ return 0xff3c;

@@ -950,7 +950,7 @@ static Py_UCS4 gb2312_decoder(const unsigned char *data) { Py_UCS4 u;

--- a/Modules/cjkcodecs/_codecs_jp.c +++ b/Modules/cjkcodecs/_codecs_jp.c @@ -85,6 +85,7 @@ DECODER(cp932) { while (inleft > 0) { unsigned char c = INBYTE1, c2;

if (c <= 0x80) { OUTCHAR(c); @@ -109,7 +110,8 @@ DECODER(cp932) REQUIRE_INBUF(2) c2 = INBYTE2;

@@ -119,8 +121,10 @@ DECODER(cp932) c = (2 * c + (c2 < 0x5e ? 0 : 1) + 0x21); c2 = (c2 < 0x5e ? c2 : c2 - 0x5e) + 0x21;

@@ -235,7 +239,7 @@ DECODER(euc_jis_2004) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -265,13 +269,15 @@ DECODER(euc_jis_2004) /* JIS X 0213 Plane 2 or JIS X 0212 (see NOTES) */ EMULATE_JISX0213_2000_DECODE_PLANE2(writer, c2, c3)

@@ -286,14 +292,16 @@ DECODER(euc_jis_2004) EMULATE_JISX0213_2000_DECODE_PLANE1(writer, c, c2) else if (c == 0x21 && c2 == 0x40) OUTCHAR(0xff3c); else if (c == 0x22 && c2 == 0x32) OUTCHAR(0xff5e);

@@ -367,6 +375,7 @@ DECODER(euc_jp) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -394,7 +403,8 @@ DECODER(euc_jp) c2 = INBYTE2; c3 = INBYTE3; /* JIS X 0212 */

@@ -412,9 +422,10 @@ DECODER(euc_jp) OUTCHAR(0xff3c); else #endif

#ifdef STRICT_BUILD JISX0201_R_DECODE(c, writer) @@ -514,7 +526,8 @@ DECODER(shift_jis) continue; } #endif

@@ -636,7 +649,7 @@ DECODER(shift_jis_2004) JISX0201_DECODE(c, writer) else if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xfc)){ unsigned char c1, c2;

REQUIRE_INBUF(2) c2 = INBYTE2; @@ -652,17 +665,14 @@ DECODER(shift_jis_2004) c1 += 0x21; EMULATE_JISX0213_2000_DECODE_PLANE1(writer, c1, c2)

@@ -674,9 +684,9 @@ DECODER(shift_jis_2004) EMULATE_JISX0213_2000_DECODE_PLANE2(writer, c1, c2)

--- a/Modules/cjkcodecs/_codecs_kr.c +++ b/Modules/cjkcodecs/_codecs_kr.c @@ -105,6 +105,7 @@ DECODER(euc_kr) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -148,7 +149,8 @@ DECODER(euc_kr) OUTCHAR(0xac00 + cho588 + jung28 + jong); NEXT_IN(8); }

@@ -198,6 +200,7 @@ DECODER(cp949) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -206,8 +209,10 @@ DECODER(cp949) } REQUIRE_INBUF(2)

NEXT_IN(2); @@ -350,7 +355,8 @@ static const unsigned char johabjamo_jon DECODER(johab) { while (inleft > 0) {

if (c < 0x80) { OUTCHAR(c); @@ -424,9 +430,13 @@ DECODER(johab) t1 = t1 + (t2 < 0x5e ? 0 : 1) + 0x21; t2 = (t2 < 0x5e ? t2 : t2 - 0x5e) + 0x21;

--- a/Modules/cjkcodecs/_codecs_tw.c +++ b/Modules/cjkcodecs/_codecs_tw.c @@ -44,6 +44,7 @@ DECODER(big5) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -52,7 +53,8 @@ DECODER(big5) } REQUIRE_INBUF(2)

@@ -98,6 +100,7 @@ DECODER(cp950) { while (inleft > 0) { unsigned char c = INBYTE1;

if (c < 0x80) { OUTCHAR(c); @@ -107,9 +110,12 @@ DECODER(cp950) REQUIRE_INBUF(2)

NEXT_IN(2); }

--- a/Modules/cjkcodecs/cjkcodecs.h +++ b/Modules/cjkcodecs/cjkcodecs.h @@ -177,29 +177,13 @@ static const struct dbcs_map *mapping_li #define TRYMAP_ENC(charset, assi, uni) [](#l7.4) if TRYMAP_ENC_COND(charset, assi, uni) -Py_LOCAL_INLINE(int) -_TRYMAP_DEC_WRITE(_PyUnicodeWriter *writer, Py_UCS4 c) -{

-} - -#define _TRYMAP_DEC(m, writer, val) [](#l7.16)

-#define _TRYMAP_DEC_CHAR(m, assi, val) [](#l7.21) +#define _TRYMAP_DEC(m, assi, val) [](#l7.22) ((m)->map != NULL && [](#l7.23) (val) >= (m)->bottom && [](#l7.24) (val)<= (m)->top && [](#l7.25) ((assi) = (m)->map[(val) - (m)->bottom]) != UNIINV) -#define TRYMAP_DEC(charset, writer, c1, c2) [](#l7.27)

-#define TRYMAP_DEC_CHAR(charset, assi, c1, c2) [](#l7.29)

+#define TRYMAP_DEC(charset, assi, c1, c2) [](#l7.31)

#define _TRYMAP_ENC_MPLANE(m, assplane, asshi, asslo, val) [](#l7.34) ((m)->map != NULL && (val) >= (m)->bottom && [](#l7.35) @@ -210,8 +194,6 @@ Py_LOCAL_INLINE(int) #define TRYMAP_ENC_MPLANE(charset, assplane, asshi, asslo, uni) [](#l7.37) if _TRYMAP_ENC_MPLANE(&charset##_encmap[(uni) >> 8], [](#l7.38) assplane, asshi, asslo, (uni) & 0xff) -#define TRYMAP_DEC_MPLANE(charset, writer, plane, c1, c2) [](#l7.40)

#define BEGIN_MAPPINGS_LIST static const struct dbcs_map _mapping_list[] = { #define MAPPING_ENCONLY(enc) {#enc, (void*)enc##_encmap, NULL},