gh-116447: Fix possible UB in `arraymodule` and `getargs` (#116459)

This commit is contained in:
Nikita Sobolev 2024-03-08 13:49:52 +03:00 committed by GitHub
parent 0003285c8d
commit fdb2d90a27
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 3 additions and 3 deletions

View File

@ -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)) if (!PyArg_Parse(v, "b;array item must be integer", &x))
return -1; return -1;
if (i >= 0) if (i >= 0)
((char *)ap->ob_item)[i] = x; ((unsigned char *)ap->ob_item)[i] = x;
return 0; return 0;
} }

View File

@ -612,7 +612,7 @@ convertsimple(PyObject *arg, const char **p_format, va_list *p_va, int flags,
switch (c) { switch (c) {
case 'b': { /* unsigned byte -- very short int */ 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); long ival = PyLong_AsLong(arg);
if (ival == -1 && PyErr_Occurred()) if (ival == -1 && PyErr_Occurred())
RETURN_ERR_OCCURRED; RETURN_ERR_OCCURRED;
@ -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 case 'B': {/* byte sized bitfield - both signed and unsigned
values allowed */ values allowed */
char *p = va_arg(*p_va, char *); unsigned char *p = va_arg(*p_va, unsigned char *);
unsigned long ival = PyLong_AsUnsignedLongMask(arg); unsigned long ival = PyLong_AsUnsignedLongMask(arg);
if (ival == (unsigned long)-1 && PyErr_Occurred()) if (ival == (unsigned long)-1 && PyErr_Occurred())
RETURN_ERR_OCCURRED; RETURN_ERR_OCCURRED;