codec/xcrush: Fix endianness in compression
Compression doesn't work on big endian machines currently. The recieved data are stored as little endian. Use conversion macros from endian.h to load and store the data properly. The patch fixes following error (so -compression option is no more needed on big endian machines): [06:42:14:782] [13772:13773] [ERROR][com.freerdp.core] - Decompression failure! [06:42:14:782] [13772:13773] [ERROR][com.freerdp.core.fastpath] - bulk_decompress() failed [06:42:14:782] [13772:13773] [ERROR][com.freerdp.core.fastpath] - fastpath_recv_update_data() fail [06:42:14:782] [13772:13773] [ERROR][com.freerdp.core.transport] - transport_check_fds: transport->ReceiveCallback() - -1 https://github.com/FreeRDP/FreeRDP/issues/2520
This commit is contained in:
parent
250998efb8
commit
e326e43e66
@ -725,7 +725,7 @@ int xcrush_decompress_l1(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize,
|
||||
if ((pSrcData + 2) > pSrcEnd)
|
||||
return -1003;
|
||||
|
||||
MatchCount = *((UINT16*) pSrcData);
|
||||
Data_Read_UINT16(pSrcData, MatchCount);
|
||||
|
||||
MatchDetails = (RDP61_MATCH_DETAILS*) &pSrcData[2];
|
||||
Literals = (BYTE*) &MatchDetails[MatchCount];
|
||||
@ -736,9 +736,9 @@ int xcrush_decompress_l1(XCRUSH_CONTEXT* xcrush, BYTE* pSrcData, UINT32 SrcSize,
|
||||
|
||||
for (MatchIndex = 0; MatchIndex < MatchCount; MatchIndex++)
|
||||
{
|
||||
MatchLength = MatchDetails[MatchIndex].MatchLength;
|
||||
MatchOutputOffset = MatchDetails[MatchIndex].MatchOutputOffset;
|
||||
MatchHistoryOffset = MatchDetails[MatchIndex].MatchHistoryOffset;
|
||||
Data_Read_UINT16(&MatchDetails[MatchIndex].MatchLength, MatchLength);
|
||||
Data_Read_UINT16(&MatchDetails[MatchIndex].MatchOutputOffset, MatchOutputOffset);
|
||||
Data_Read_UINT32(&MatchDetails[MatchIndex].MatchHistoryOffset, MatchHistoryOffset);
|
||||
|
||||
if (MatchOutputOffset < OutputOffset)
|
||||
return -1005;
|
||||
|
Loading…
Reference in New Issue
Block a user