From 0bdc1fadc5888a61688eb5d13f0232a7779cdc49 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 7 Mar 2024 13:36:20 +0300 Subject: [PATCH 1/2] gh-116447: Fix possible UB in `arraymodule` and `getargs` --- Modules/arraymodule.c | 2 +- Python/getargs.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index df09d9d84789f73..317f4974814945e 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -247,7 +247,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 08e97ee3e627b5a..a7bfad4dd69773d 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -612,7 +612,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; From fc1c37cc792d7ec5fb6b76e53feb13f2427e9386 Mon Sep 17 00:00:00 2001 From: sobolevn Date: Thu, 7 Mar 2024 14:13:18 +0300 Subject: [PATCH 2/2] Address review --- Python/getargs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Python/getargs.c b/Python/getargs.c index a7bfad4dd69773d..bec981698767ca0 100644 --- a/Python/getargs.c +++ b/Python/getargs.c @@ -633,7 +633,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;