From 9d5028bc619e85d4a12faff3b404388c2ca6738a Mon Sep 17 00:00:00 2001 From: TermiNexus Date: Sun, 11 Oct 2026 11:06:02 +0800 Subject: [PATCH] =?UTF-8?q?fix(narrow):=20byte=20=E7=BC=93=E5=86=B2?= =?UTF-8?q?=E5=86=99=2032=20=E4=BD=8D=E6=8E=A9=E7=A0=81=E7=BB=93=E6=9E=9C?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20uint8(...)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit base64 解码输出、zipfile zf_w16le/zf_win32le、zlib adler/gzip 尾写:目标为 bytes/uint8*/BYTE*(8 位),RHS 为 32 位表达式,触发隐式窄化;统一加 uint8(...) --- base64.vp | 6 +++--- zipfile.vp | 12 ++++++------ zlib/pyzlib.vp | 24 ++++++++++++------------ zlib/zdeflate.vp | 16 ++++++++-------- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/base64.vp b/base64.vp index 34a9052..56b4976 100644 --- a/base64.vp +++ b/base64.vp @@ -64,12 +64,12 @@ def b64decode(s: str, out: uint8*) -> sizet: c = s[i+3] - 43 if s[i+3] != '=': val |= (b64_dec_tab[c] & 0x3F) # Write recovered bytes - out[j] = (val >> 16) & 0xFF + out[j] = uint8((val >> 16) & 0xFF) j += 1 if s[i+2] != '=': - out[j] = (val >> 8) & 0xFF + out[j] = uint8((val >> 8) & 0xFF) j += 1 if s[i+3] != '=': - out[j] = val & 0xFF + out[j] = uint8(val & 0xFF) j += 1 return j diff --git a/zipfile.vp b/zipfile.vp index 34bbea4..6c63312 100644 --- a/zipfile.vp +++ b/zipfile.vp @@ -114,15 +114,15 @@ def zf_u32le(p: uint8*) -> uint32: def zf_w16le(h: uint8*, v: uint32): - h[0] = v & 0xFF - h[1] = (v >> 8) & 0xFF + h[0] = uint8(v & 0xFF) + h[1] = uint8((v >> 8) & 0xFF) def zf_win32le(h: uint8*, v: uint32): - h[0] = v & 0xFF - h[1] = (v >> 8) & 0xFF - h[2] = (v >> 16) & 0xFF - h[3] = (v >> 24) & 0xFF + h[0] = uint8(v & 0xFF) + h[1] = uint8((v >> 8) & 0xFF) + h[2] = uint8((v >> 16) & 0xFF) + h[3] = uint8((v >> 24) & 0xFF) # All file openings allow read/write/delete sharing, avoiding mutually exclusive handles diff --git a/zlib/pyzlib.vp b/zlib/pyzlib.vp index 9ab4b65..88078a7 100644 --- a/zlib/pyzlib.vp +++ b/zlib/pyzlib.vp @@ -159,10 +159,10 @@ class Compress: if s.wbits >= 0: s.writer.align() adler: uint32 = s.adler - s.writer.buf[s.writer.byte_pos + 0] = (adler >> 24) & 0xFF - s.writer.buf[s.writer.byte_pos + 1] = (adler >> 16) & 0xFF - s.writer.buf[s.writer.byte_pos + 2] = (adler >> 8) & 0xFF - s.writer.buf[s.writer.byte_pos + 3] = (adler >> 0) & 0xFF + s.writer.buf[s.writer.byte_pos + 0] = uint8((adler >> 24) & 0xFF) + s.writer.buf[s.writer.byte_pos + 1] = uint8((adler >> 16) & 0xFF) + s.writer.buf[s.writer.byte_pos + 2] = uint8((adler >> 8) & 0xFF) + s.writer.buf[s.writer.byte_pos + 3] = uint8((adler >> 0) & 0xFF) s.writer.byte_pos += 4 self.is_finished = 1 total: sizet = s.writer.total() @@ -590,14 +590,14 @@ def compress(pool: memhub.MemManager*, data: BYTEPTR, data_len: sizet, pool.free(raw_result) crc: uint32 = zchecksum.zchecksum_crc32(data, data_len, 0) - gzip_buf[pos + 0] = (crc) & 0xFF - gzip_buf[pos + 1] = (crc >> 8) & 0xFF - gzip_buf[pos + 2] = (crc >> 16) & 0xFF - gzip_buf[pos + 3] = (crc >> 24) & 0xFF - gzip_buf[pos + 4] = (data_len) & 0xFF - gzip_buf[pos + 5] = (data_len >> 8) & 0xFF - gzip_buf[pos + 6] = (data_len >> 16) & 0xFF - gzip_buf[pos + 7] = (data_len >> 24) & 0xFF + gzip_buf[pos + 0] = uint8((crc) & 0xFF) + gzip_buf[pos + 1] = uint8((crc >> 8) & 0xFF) + gzip_buf[pos + 2] = uint8((crc >> 16) & 0xFF) + gzip_buf[pos + 3] = uint8((crc >> 24) & 0xFF) + gzip_buf[pos + 4] = uint8((data_len) & 0xFF) + gzip_buf[pos + 5] = uint8((data_len >> 8) & 0xFF) + gzip_buf[pos + 6] = uint8((data_len >> 16) & 0xFF) + gzip_buf[pos + 7] = uint8((data_len >> 24) & 0xFF) pos += 8 *out_len = pos return shrink_to_fit(pool, gzip_buf, pos) diff --git a/zlib/zdeflate.vp b/zlib/zdeflate.vp index 0c37343..b970677 100644 --- a/zlib/zdeflate.vp +++ b/zlib/zdeflate.vp @@ -199,10 +199,10 @@ class zdeflate_stream: if self.wbits >= 0: self.writer.align() adler: uint32 = self.adler - self.writer.buf[self.writer.byte_pos + 0] = (adler >> 24) & 0xFF - self.writer.buf[self.writer.byte_pos + 1] = (adler >> 16) & 0xFF - self.writer.buf[self.writer.byte_pos + 2] = (adler >> 8) & 0xFF - self.writer.buf[self.writer.byte_pos + 3] = (adler >> 0) & 0xFF + self.writer.buf[self.writer.byte_pos + 0] = uint8((adler >> 24) & 0xFF) + self.writer.buf[self.writer.byte_pos + 1] = uint8((adler >> 16) & 0xFF) + self.writer.buf[self.writer.byte_pos + 2] = uint8((adler >> 8) & 0xFF) + self.writer.buf[self.writer.byte_pos + 3] = uint8((adler >> 0) & 0xFF) self.writer.byte_pos += 4 elif mode == 2 or mode == 3: self.writer.write_bits(0, 1) @@ -426,10 +426,10 @@ def zdeflate_one_shot(pool: memhub.MemManager*, data: UINT8PTR, length: sizet, if wbits >= 0: s.writer.align() adler: uint32 = s.adler - s.writer.buf[s.writer.byte_pos + 0] = (adler >> 24) & 0xFF - s.writer.buf[s.writer.byte_pos + 1] = (adler >> 16) & 0xFF - s.writer.buf[s.writer.byte_pos + 2] = (adler >> 8) & 0xFF - s.writer.buf[s.writer.byte_pos + 3] = (adler >> 0) & 0xFF + s.writer.buf[s.writer.byte_pos + 0] = uint8((adler >> 24) & 0xFF) + s.writer.buf[s.writer.byte_pos + 1] = uint8((adler >> 16) & 0xFF) + s.writer.buf[s.writer.byte_pos + 2] = uint8((adler >> 8) & 0xFF) + s.writer.buf[s.writer.byte_pos + 3] = uint8((adler >> 0) & 0xFF) s.writer.byte_pos += 4 *out_len = s.writer.total() result: UINT8PTR = UINT8PTR(zdef.zdef_alloc(pool, *out_len))