diff options
author | Xiang Zhang <angwerzx@126.com> | 2017-05-22 17:03:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-22 17:03:00 (GMT) |
commit | 54af41d42eebbe4c6afe6b34ebb0fb550de1e7ba (patch) | |
tree | e7d7577bba787044850a6fc708de2fca0c280a2d /Modules/cjkcodecs | |
parent | 0702cc01fa3dc52087a5d468fc5a4984f3697446 (diff) | |
download | cpython-54af41d42eebbe4c6afe6b34ebb0fb550de1e7ba.zip cpython-54af41d42eebbe4c6afe6b34ebb0fb550de1e7ba.tar.gz cpython-54af41d42eebbe4c6afe6b34ebb0fb550de1e7ba.tar.bz2 |
bpo-30003: Fix handling escape characters in HZ codec (#1556) (#1719)
Diffstat (limited to 'Modules/cjkcodecs')
-rw-r--r-- | Modules/cjkcodecs/_codecs_cn.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/Modules/cjkcodecs/_codecs_cn.c b/Modules/cjkcodecs/_codecs_cn.c index bda175c..1fcc220 100644 --- a/Modules/cjkcodecs/_codecs_cn.c +++ b/Modules/cjkcodecs/_codecs_cn.c @@ -350,15 +350,17 @@ ENCODER(hz) DBCHAR code; if (c < 0x80) { - if (state->i == 0) { - WRITEBYTE1((unsigned char)c); - NEXT(1, 1); - } - else { - WRITEBYTE3('~', '}', (unsigned char)c); - NEXT(1, 3); + if (state->i) { + WRITEBYTE2('~', '}'); + NEXT_OUT(2); state->i = 0; } + WRITEBYTE1((unsigned char)c); + NEXT(1, 1); + if (c == '~') { + WRITEBYTE1('~'); + NEXT_OUT(1); + } continue; } @@ -409,17 +411,14 @@ DECODER(hz) unsigned char c2 = INBYTE2; REQUIRE_INBUF(2); - if (c2 == '~') { + if (c2 == '~' && state->i == 0) OUTCHAR('~'); - NEXT_IN(2); - continue; - } else if (c2 == '{' && state->i == 0) state->i = 1; /* set GB */ + else if (c2 == '\n' && state->i == 0) + ; /* line-continuation */ else if (c2 == '}' && state->i == 1) state->i = 0; /* set ASCII */ - else if (c2 == '\n') - ; /* line-continuation */ else return 1; NEXT_IN(2); |