diff --git a/Cython/Utility/StringTools.c b/Cython/Utility/StringTools.c index 6505c8130d05379df14636c59f5c6bba3fbaf090..0869f8184eafe8b961cdd7af436723bff9aeafc7 100644 --- a/Cython/Utility/StringTools.c +++ b/Cython/Utility/StringTools.c @@ -699,9 +699,14 @@ static CYTHON_INLINE int __Pyx_PyByteArray_AppendObject(PyObject* bytearray, PyO } else #endif { + // CPython calls PyNumber_Index() internally ival = __Pyx_PyIndex_AsSsize_t(value); - if (unlikely(ival == -1 && PyErr_Occurred())) + if (unlikely((ival < 0) | (ival > 255))) { + if (ival == -1 && PyErr_Occurred()) + return -1; + PyErr_SetString(PyExc_ValueError, "byte must be in range(0, 256)"); return -1; + } } return __Pyx_PyByteArray_Append(bytearray, ival); }