mirror of
https://github.com/python/cpython.git
synced 2025-09-27 18:59:43 +00:00
[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 fdb2d90a27
)
Co-authored-by: Nikita Sobolev <mail@sobolevn.me>
This commit is contained in:
parent
a8a95135a2
commit
2647afeab6
2 changed files with 3 additions and 3 deletions
|
@ -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))
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -672,7 +672,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;
|
||||||
|
@ -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
|
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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue