See https://trac.kodi.tv/ticket/17510 diff --git a/lib/UnrarXLib/rarvm.cpp b/lib/UnrarXLib/rarvm.cpp index 901c35dcb4..42df0a0110 100644 --- a/lib/UnrarXLib/rarvm.cpp +++ b/lib/UnrarXLib/rarvm.cpp @@ -873,14 +873,16 @@ void RarVM::ExecuteStandardFilter(VM_StandardFilters FilterType) break; case VMSF_DELTA: { - int DataSize=R[4],Channels=R[0],SrcPos=0,Border=DataSize*2; - SET_VALUE(false,&Mem[VM_GLOBALMEMADDR+0x20],DataSize); - if (DataSize>=VM_GLOBALMEMADDR/2) - break; - for (int CurChannel=0;CurChannelVM_MEMSIZE/2 || Channels>MAX3_UNPACK_CHANNELS || Channels==0) + break; + + // Bytes from same channels are grouped to continual data blocks, + // so we need to place them back to their interleaving positions. + for (uint CurChannel=0;CurChannel