mirror of
https://github.com/python/cpython.git
synced 2025-12-10 19:10:59 +00:00
Check range for bytes and shorts. Closes bug #110845.
This commit is contained in:
parent
c58dbebf4b
commit
66de5497c5
1 changed files with 42 additions and 2 deletions
|
|
@ -477,6 +477,26 @@ np_byte(char *p, PyObject *v, const formatdef *f)
|
||||||
long x;
|
long x;
|
||||||
if (get_long(v, &x) < 0)
|
if (get_long(v, &x) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
if (x < -128 || x > 127){
|
||||||
|
PyErr_SetString(StructError,
|
||||||
|
"byte format requires -128<=number<=127");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
*p = (char)x;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
np_ubyte(char *p, PyObject *v, const formatdef *f)
|
||||||
|
{
|
||||||
|
long x;
|
||||||
|
if (get_long(v, &x) < 0)
|
||||||
|
return -1;
|
||||||
|
if (x < 0 || x > 255){
|
||||||
|
PyErr_SetString(StructError,
|
||||||
|
"ubyte format requires 0<=number<=255");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
*p = (char)x;
|
*p = (char)x;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
@ -499,10 +519,30 @@ np_short(char *p, PyObject *v, const formatdef *f)
|
||||||
long x;
|
long x;
|
||||||
if (get_long(v, &x) < 0)
|
if (get_long(v, &x) < 0)
|
||||||
return -1;
|
return -1;
|
||||||
|
if (x < -32768 || x > 32767){
|
||||||
|
PyErr_SetString(StructError,
|
||||||
|
"short format requires -32768<=number<=32767");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
* (short *)p = (short)x;
|
* (short *)p = (short)x;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
np_ushort(char *p, PyObject *v, const formatdef *f)
|
||||||
|
{
|
||||||
|
long x;
|
||||||
|
if (get_long(v, &x) < 0)
|
||||||
|
return -1;
|
||||||
|
if (x < 0 || x > 65535){
|
||||||
|
PyErr_SetString(StructError,
|
||||||
|
"short format requires 0<=number<=65535");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
* (unsigned short *)p = (unsigned short)x;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
np_int(char *p, PyObject *v, const formatdef *f)
|
np_int(char *p, PyObject *v, const formatdef *f)
|
||||||
{
|
{
|
||||||
|
|
@ -587,12 +627,12 @@ np_void_p(char *p, PyObject *v, const formatdef *f)
|
||||||
static formatdef native_table[] = {
|
static formatdef native_table[] = {
|
||||||
{'x', sizeof(char), 0, NULL},
|
{'x', sizeof(char), 0, NULL},
|
||||||
{'b', sizeof(char), 0, nu_byte, np_byte},
|
{'b', sizeof(char), 0, nu_byte, np_byte},
|
||||||
{'B', sizeof(char), 0, nu_ubyte, np_byte},
|
{'B', sizeof(char), 0, nu_ubyte, np_ubyte},
|
||||||
{'c', sizeof(char), 0, nu_char, np_char},
|
{'c', sizeof(char), 0, nu_char, np_char},
|
||||||
{'s', sizeof(char), 0, NULL},
|
{'s', sizeof(char), 0, NULL},
|
||||||
{'p', sizeof(char), 0, NULL},
|
{'p', sizeof(char), 0, NULL},
|
||||||
{'h', sizeof(short), SHORT_ALIGN, nu_short, np_short},
|
{'h', sizeof(short), SHORT_ALIGN, nu_short, np_short},
|
||||||
{'H', sizeof(short), SHORT_ALIGN, nu_ushort, np_short},
|
{'H', sizeof(short), SHORT_ALIGN, nu_ushort, np_ushort},
|
||||||
{'i', sizeof(int), INT_ALIGN, nu_int, np_int},
|
{'i', sizeof(int), INT_ALIGN, nu_int, np_int},
|
||||||
{'I', sizeof(int), INT_ALIGN, nu_uint, np_uint},
|
{'I', sizeof(int), INT_ALIGN, nu_uint, np_uint},
|
||||||
{'l', sizeof(long), LONG_ALIGN, nu_long, np_long},
|
{'l', sizeof(long), LONG_ALIGN, nu_long, np_long},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue