From 09b06cee2ff6de45e25592b1822e15667b36d441 Mon Sep 17 00:00:00 2001 From: "Evgeny Grechnikov (Diamond)" Date: Fri, 14 Nov 2008 21:44:53 +0000 Subject: [PATCH] kfar_arc: bugfix in unpacking of 7z archives git-svn-id: svn://kolibrios.org@920 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/fs/kfar/trunk/kfar_arc/kfar_arc.asm | 4 ++-- programs/fs/kfar/trunk/kfar_arc/lzma.inc | 12 +++++++++--- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/programs/fs/kfar/trunk/kfar_arc/kfar_arc.asm b/programs/fs/kfar/trunk/kfar_arc/kfar_arc.asm index 6cefc56747..33ab4fbd89 100644 --- a/programs/fs/kfar/trunk/kfar_arc/kfar_arc.asm +++ b/programs/fs/kfar/trunk/kfar_arc/kfar_arc.asm @@ -2,8 +2,8 @@ ; project name: KFar_Arc - plugin for KFar, which supports various archives ; target platform: KolibriOS ; compiler: FASM 1.67.14 -; version: 0.13 -; last update: 2008-11-02 (Nov 02, 2008) +; version: 0.14 +; last update: 2008-11-15 (Nov 15, 2008) ; minimal KFar version: 0.41 ; minimal kernel: no limit ; diff --git a/programs/fs/kfar/trunk/kfar_arc/lzma.inc b/programs/fs/kfar/trunk/kfar_arc/lzma.inc index 2410870f19..37e50ff0c4 100644 --- a/programs/fs/kfar/trunk/kfar_arc/lzma.inc +++ b/programs/fs/kfar/trunk/kfar_arc/lzma.inc @@ -274,7 +274,7 @@ end virtual .repmovsbr: mov eax, [ebp+.rep0] cmp eax, [ebp+.dictSize] - jae return.err + ja return.err mov esi, edi sub esi, eax mov eax, [ebp+streamInfo.bufPtr] @@ -282,6 +282,7 @@ end virtual ja .repmovsb0 mov eax, [ebp+.outEnd] sub eax, edi + jz .done1 push ecx cmp ecx, eax jb @f @@ -291,6 +292,7 @@ end virtual rep movsb pop ecx jz .repmovsb1 +.done1: pop [ebp+.inPtr] mov [ebp+.state], ebx mov [ebp+.ecx], ecx @@ -299,8 +301,8 @@ end virtual ret .repmovsb0: mov edx, [ebp+.dictSize] - cmp edx, [ebp+streamInfo.bufSize] - jnz return.err +; cmp edx, [ebp+streamInfo.bufSize] +; jnz return.err add esi, edx push ecx cmp ecx, eax @@ -309,6 +311,7 @@ end virtual @@: mov eax, [ebp+.outEnd] sub eax, edi + jz .done2 cmp ecx, eax jb @f mov ecx, eax @@ -322,6 +325,9 @@ end virtual mov al, [edi-1] mov [ebp+.previousByte], al jmp .main_loop +.done2: + pop ecx + jmp .done1 .main_loop_done: mov [ebp+.state], ebx mov [ebp+.continue], .main_loop