diff options
author | Hye-Shik Chang <hyeshik@gmail.com> | 2007-06-05 19:14:33 (GMT) |
---|---|---|
committer | Hye-Shik Chang <hyeshik@gmail.com> | 2007-06-05 19:14:33 (GMT) |
commit | 60111e09a915be77762c7af5448ea34a61de4577 (patch) | |
tree | 2175127b8b9dec75441f93fd5636f408010bafac /Modules/cjkcodecs | |
parent | c9490e2fe9a21a738ca45930b3d97bdc0a7c5bce (diff) | |
download | cpython-60111e09a915be77762c7af5448ea34a61de4577.zip cpython-60111e09a915be77762c7af5448ea34a61de4577.tar.gz cpython-60111e09a915be77762c7af5448ea34a61de4577.tar.bz2 |
(Backport from r55770)
Bug #1728403: Fix a bug that CJKCodecs StreamReader hangs when it
reads a file that ends with incomplete sequence and sizehint argument
for .read() is specified.
Diffstat (limited to 'Modules/cjkcodecs')
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 7c6b989..9fb9570 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1214,6 +1214,8 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self, cres = NULL; for (;;) { + int endoffile; + if (sizehint < 0) cres = PyObject_CallMethod(self->stream, (char *)method, NULL); @@ -1230,6 +1232,8 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self, goto errorexit; } + endoffile = (PyString_GET_SIZE(cres) == 0); + if (self->pendingsize > 0) { PyObject *ctr; char *ctrdata; @@ -1257,7 +1261,7 @@ mbstreamreader_iread(MultibyteStreamReaderObject *self, (MultibyteStatefulDecoderContext *)self, &buf)) goto errorexit; - if (rsize == 0 || sizehint < 0) { /* end of file */ + if (endoffile || sizehint < 0) { if (buf.inbuf < buf.inbuf_end && multibytecodec_decerror(self->codec, &self->state, &buf, self->errors, MBERR_TOOFEW)) |