mirror of https://github.com/python/cpython
Issue #18408: Fix cjkcodecs decoders, add a new MBERR_EXCEPTION constant to
notify exceptions raised by the _PyUnicodeWriter API
This commit is contained in:
parent
85c761d3d3
commit
d1f9942ae3
|
@ -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; \
|
||||
|
|
|
@ -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");
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue