From d0546c16da643df4894d6577c5b026a22be8ef88 Mon Sep 17 00:00:00 2001 From: blueloveTH Date: Sat, 14 Dec 2024 16:06:58 +0800 Subject: [PATCH] ... --- src/modules/pickle.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/modules/pickle.c b/src/modules/pickle.c index 33d43d30..fd3a35d9 100644 --- a/src/modules/pickle.c +++ b/src/modules/pickle.c @@ -33,7 +33,7 @@ typedef struct { } PickleObject; typedef struct { - uint32_t memo_length; + uint16_t memo_length; } PickleObjectHeader; static void PickleObject__ctor(PickleObject* self) { @@ -46,13 +46,15 @@ static void PickleObject__dtor(PickleObject* self) { c11_vector__dtor(&self->codes); } -static void PickleObject__py_submit(PickleObject* self, py_OutRef out) { +static bool PickleObject__py_submit(PickleObject* self, py_OutRef out) { unsigned char* data = self->codes.data; PickleObjectHeader* p = (PickleObjectHeader*)py_newbytes(out, sizeof(PickleObjectHeader) + self->codes.length); - p->memo_length = self->memo.length; + if(self->memo.length >= UINT16_MAX) c11__abort("PickleObject__py_submit(): memo overflow"); + p->memo_length = (uint16_t)self->memo.length; memcpy(p + 1, data, self->codes.length); PickleObject__dtor(self); + return true; } static void PickleObject__write_bytes(PickleObject* buf, const void* data, int size) { @@ -318,8 +320,7 @@ bool py_pickle_dumps(py_Ref val) { return false; } pkl__emit_op(&buf, PKL_EOF); - PickleObject__py_submit(&buf, py_retval()); - return true; + return PickleObject__py_submit(&buf, py_retval()); } bool py_pickle_loads(const unsigned char* data, int size) {