fix(narrow): byte 缓冲写 32 位掩码结果改用 uint8(...)
base64 解码输出、zipfile zf_w16le/zf_win32le、zlib adler/gzip 尾写:目标为 bytes/uint8*/BYTE*(8 位),RHS 为 32 位表达式,触发隐式窄化;统一加 uint8(...)
This commit is contained in:
1 parent
3dd5bca28e
commit
9d5028bc61
4 files changed
+29
-29
No files matched your search
@@ -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
|
||||
+6
-6
@@ -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
|
||||
|
||||
+12
-12
@@ -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)
|
||||
|
||||
+8
-8
@@ -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))
|
||||
|
||||
Reference in new issue
Block a user