From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Fri, 8 Mar 2024 11:22:07 +0000 (+0100) Subject: [3.12] gh-116447: Fix possible UB in `arraymodule` and `getargs` (GH-116459) (#116496) X-Git-Tag: v3.12.3~131 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2647afeab694517933c53028d4ad427460b9e1fa;p=thirdparty%2FPython%2Fcpython.git [3.12] gh-116447: Fix possible UB in `arraymodule` and `getargs` (GH-116459) (#116496) gh-116447: Fix possible UB in `arraymodule` and `getargs` (GH-116459) (cherry picked from commit fdb2d90a274158aee23b526d972172bf41bd4b7e) Co-authored-by: Nikita Sobolev --- diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 6680820d8e61..19ee83d24c81 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -244,7 +244,7 @@ BB_setitem(arrayobject *ap, Py_ssize_t i, PyObject *v) if (!PyArg_Parse(v, "b;array item must be integer", &x)) return -1; if (i >= 0) - ((char *)ap->ob_item)[i] = x; + ((unsigned char *)ap->ob_item)[i] = x; return 0; } diff --git a/Python/getargs.c b/Python/getargs.c index 066739f21fc4..5e731cdc23cb 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -672,7 +672,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, switch (c) { case 'b': { /* unsigned byte -- very short int */ - char *p = va_arg(*p_va, char *); + unsigned char *p = va_arg(*p_va, unsigned char *); long ival = PyLong_AsLong(arg); if (ival == -1 && PyErr_Occurred()) RETURN_ERR_OCCURRED; @@ -693,7 +693,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags, case 'B': {/* byte sized bitfield - both signed and unsigned values allowed */ - char *p = va_arg(*p_va, char *); + unsigned char *p = va_arg(*p_va, unsigned char *); unsigned long ival = PyLong_AsUnsignedLongMask(arg); if (ival == (unsigned long)-1 && PyErr_Occurred()) RETURN_ERR_OCCURRED;