mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-20 03:20:18 +00:00
avoid undefined behavior signed int overflow
This commit is contained in:
parent
db3e2379b9
commit
28cdde503b
@ -80,13 +80,13 @@ static void pkl__emit_int(PickleObject* buf, py_i64 val) {
|
||||
pkl__emit_op(buf, PKL_INT_0 + val);
|
||||
return;
|
||||
}
|
||||
if((int8_t)val == val) {
|
||||
if(INT8_MIN <= val && val <= INT8_MAX) {
|
||||
pkl__emit_op(buf, PKL_INT8);
|
||||
PickleObject__write_bytes(buf, &val, 1);
|
||||
} else if((int16_t)val == val) {
|
||||
} else if(INT16_MIN <= val && val <= INT16_MAX) {
|
||||
pkl__emit_op(buf, PKL_INT16);
|
||||
PickleObject__write_bytes(buf, &val, 2);
|
||||
} else if((int32_t)val == val) {
|
||||
} else if(INT32_MIN <= val && val <= INT32_MAX) {
|
||||
pkl__emit_op(buf, PKL_INT32);
|
||||
PickleObject__write_bytes(buf, &val, 4);
|
||||
} else {
|
||||
@ -680,7 +680,7 @@ bool py_pickle_loads_body(const unsigned char* p, int memo_length, c11_smallmap_
|
||||
int dict_length = pkl__read_int(&p);
|
||||
for(int i = 0; i < dict_length; i++) {
|
||||
py_StackRef value = py_peek(-1);
|
||||
c11_sv field = {(const char*)p, strlen((const char*)p)};
|
||||
c11_sv field = {(const char*)p, strlen((const char*)p)};
|
||||
NameDict__set(dict, py_namev(field), *value);
|
||||
py_pop();
|
||||
p += field.size + 1;
|
||||
@ -728,4 +728,4 @@ static bool PickleObject__py_submit(PickleObject* self, py_OutRef out) {
|
||||
return true;
|
||||
}
|
||||
|
||||
#undef UNALIGNED_READ
|
||||
#undef UNALIGNED_READ
|
||||
|
Loading…
x
Reference in New Issue
Block a user