mirror of https://github.com/python/cpython
gh-116447: Fix possible UB in `arraymodule` and `getargs` (#116459)
This commit is contained in:
parent
0003285c8d
commit
fdb2d90a27
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue