Skip to content

Commit a131fb8

Browse files
committed
xrCore: rt_compressor.cpp: Use appropriate integer type
* rtc_compress, rtc_decompress: Both of these functions pass a pointer to an out_size variable which lzo1x_1_compress and lzo1x_1_decompress dereference to store the value for the caller to use. The problem is that with a u32 type it's passing a pointer to a 4-byte integer but cast as an 8-byte integer hence the dereference and store is unsafe. *out_len = 0; 00000001405064F6 mov rax,qword ptr [out_len] 00000001405064FE mov qword ptr [rsp+58h],rax 0000000140506503 mov rcx,qword ptr [rsp+58h] 0000000140506508 call __asan_store8 (014355B111h) 000000014050650D mov rax,qword ptr [out_len] 0000000140506515 mov qword ptr [rax],0 <----- *qword* Found with address sanitizer.
1 parent 852d7e0 commit a131fb8

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

src/xrCore/rt_compressor.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ u32 rtc_csize(u32 in)
2525

2626
u32 rtc_compress(void* dst, u32 dst_len, const void* src, u32 src_len)
2727
{
28-
u32 out_size = dst_len;
28+
lzo_uint out_size = dst_len;
2929
int r = lzo1x_1_compress(
3030
(const lzo_byte*)src, (lzo_uint)src_len,
3131
(lzo_byte*)dst, (lzo_uintp)&out_size,
@@ -36,7 +36,7 @@ u32 rtc_compress(void* dst, u32 dst_len, const void* src, u32 src_len)
3636

3737
u32 rtc_decompress(void* dst, u32 dst_len, const void* src, u32 src_len)
3838
{
39-
u32 out_size = dst_len;
39+
lzo_uint out_size = dst_len;
4040
int r = lzo1x_decompress(
4141
(const lzo_byte*)src, (lzo_uint)src_len,
4242
(lzo_byte*)dst, (lzo_uintp)&out_size,

0 commit comments

Comments
 (0)