@@ -180,6 +180,7 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
180180for  (UINT nBlock=0 ; nBlock<pmmh->nblocks ; nBlock++)
181181{
182182DWORD dwMemPos = bswapLE32 (pblk_table[nBlock]);
183+ DWORD dwSubPos;
183184LPMMCMPBLOCK pblk;
184185LPMMCMPSUBBLOCK psubblk;
185186
@@ -191,6 +192,7 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
191192swap_subblock (psubblk);
192193
193194if  (dwMemPos + 20  + pblk->sub_blk *8  >= dwMemLength) break ;
195+ dwSubPos = dwMemPos + 20 ;
194196dwMemPos += 20  + pblk->sub_blk *8 ;
195197#ifdef  MMCMP_LOG
196198Log (" block %d: flags=%04X sub_blocks=%d" flags , (UINT)pblk->sub_blk );
@@ -210,7 +212,8 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
210212#endif 
211213memcpy (pBuffer+psubblk->unpk_pos , lpMemFile+dwMemPos, psubblk->unpk_size );
212214dwMemPos += psubblk->unpk_size ;
213- psubblk++;
215+ memcpy (tmp1+20 ,lpMemFile+dwSubPos+i*8 ,8 );
216+ swap_subblock (psubblk);
214217}
215218} else 
216219//  Data is 16-bit packed
@@ -277,9 +280,11 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
277280if  (dwPos >= dwSize)
278281{
279282subblk++;
283+ memcpy (tmp1+20 ,lpMemFile+dwSubPos+subblk*8 ,8 );
284+ swap_subblock (psubblk);
280285dwPos = 0 ;
281- dwSize = psubblk[subblk]. unpk_size  >> 1 ;
282- pDest = (LPWORD)(pBuffer + psubblk[subblk]. unpk_pos );
286+ dwSize = psubblk-> unpk_size  >> 1 ;
287+ pDest = (LPWORD)(pBuffer + psubblk-> unpk_pos );
283288}
284289}
285290} else  if  (pblk->num_bits  < 8 )
@@ -337,9 +342,11 @@ BOOL MMCMP_Unpack(LPCBYTE *ppMemFile, LPDWORD pdwMemLength)
337342if  (dwPos >= dwSize)
338343{
339344subblk++;
345+ memcpy (tmp1+20 ,lpMemFile+dwSubPos+subblk*8 ,8 );
346+ swap_subblock (psubblk);
340347dwPos = 0 ;
341- dwSize = psubblk[subblk]. unpk_size ;
342- pDest = pBuffer + psubblk[subblk]. unpk_pos ;
348+ dwSize = psubblk-> unpk_size ;
349+ pDest = pBuffer + psubblk-> unpk_pos ;
343350}
344351}
345352} else 
0 commit comments