diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2013-07-16 19:41:43 (GMT) |
---|---|---|
committer | Victor Stinner <victor.stinner@gmail.com> | 2013-07-16 19:41:43 (GMT) |
commit | d1f9942ae399c765c1bee392658fc0f56f963ec5 (patch) | |
tree | 6d566256fb6d1c9edae6257bb612e1d867e58058 /Modules | |
parent | 85c761d3d3357615da15b332df36b307c70e2acb (diff) | |
download | cpython-d1f9942ae399c765c1bee392658fc0f56f963ec5.zip cpython-d1f9942ae399c765c1bee392658fc0f56f963ec5.tar.gz cpython-d1f9942ae399c765c1bee392658fc0f56f963ec5.tar.bz2 |
Issue #18408: Fix cjkcodecs decoders, add a new MBERR_EXCEPTION constant to
notify exceptions raised by the _PyUnicodeWriter API
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/cjkcodecs/cjkcodecs.h | 4 | ||||
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 2 | ||||
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.h | 1 |
3 files changed, 5 insertions, 2 deletions
diff --git a/Modules/cjkcodecs/cjkcodecs.h b/Modules/cjkcodecs/cjkcodecs.h index 18cc02f..9e92db2 100644 --- a/Modules/cjkcodecs/cjkcodecs.h +++ b/Modules/cjkcodecs/cjkcodecs.h @@ -130,7 +130,7 @@ static const struct dbcs_map *mapping_list; #define OUTCHAR(c) \ do { \ if (_PyUnicodeWriter_WriteChar(writer, (c)) < 0) \ - return MBERR_TOOSMALL; \ + return MBERR_EXCEPTION; \ } while (0) #define OUTCHAR2(c1, c2) \ @@ -138,7 +138,7 @@ static const struct dbcs_map *mapping_list; Py_UCS4 _c1 = (c1); \ Py_UCS4 _c2 = (c2); \ if (_PyUnicodeWriter_Prepare(writer, 2, Py_MAX(_c1, c2)) < 0) \ - return MBERR_TOOSMALL; \ + return MBERR_EXCEPTION; \ PyUnicode_WRITE(writer->kind, writer->data, writer->pos, _c1); \ PyUnicode_WRITE(writer->kind, writer->data, writer->pos + 1, _c2); \ writer->pos += 2; \ diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index 2a29b7d..3c5173f 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -384,6 +384,8 @@ multibytecodec_decerror(MultibyteCodec *codec, PyErr_SetString(PyExc_RuntimeError, "internal codec error"); return -1; + case MBERR_EXCEPTION: + return -1; default: PyErr_SetString(PyExc_RuntimeError, "unknown runtime error"); diff --git a/Modules/cjkcodecs/multibytecodec.h b/Modules/cjkcodecs/multibytecodec.h index 3050aeb..7cde8e3 100644 --- a/Modules/cjkcodecs/multibytecodec.h +++ b/Modules/cjkcodecs/multibytecodec.h @@ -112,6 +112,7 @@ typedef struct { #define MBERR_TOOSMALL (-1) /* insufficient output buffer space */ #define MBERR_TOOFEW (-2) /* incomplete input buffer */ #define MBERR_INTERNAL (-3) /* internal runtime error */ +#define MBERR_EXCEPTION (-4) /* an exception has been raised */ #define ERROR_STRICT (PyObject *)(1) #define ERROR_IGNORE (PyObject *)(2) |