Hallo DPler,
ich arbeite gerade etwas an der
DEC. Aktuell Sitze ich vor der LHSZ.pas. Für alle, die es nicht wissen: Es ist eine schlanke, effektive
Unit für Hufmann-Kompression mit optionaler Verschlüsselung.
Die original
Unit läuft nur bis ~ D7, darüber knallt es mit AVs, die ich soweit beheben konnte: Im Vergleich zu Hagens Original habe ich die Chars-Deklaration auch im Inflate Record hinzugefügt, da dieser hier fehlte.
Das Problem ist nun, daß die Inflate-Funktion scheinbar einen Bug hat, der nur > D7 zum Tragen kommt. Im Debugger sehe ich schon mal, daß in LH.Data nie ein Wert geschrieben wird. Die Frage ist, warum?
Kann das bitte mal jemand Testen?
Code zum Testen der LHSZ.pas:
Delphi-Quellcode:
procedure Test;
var
Key, PlainText:
String;
CipherText:
String;
Data: Pointer;
Res: Integer;
begin
PlainText := '
יהורם גאון test test test test test test test test test test test test';
Key := '
testpw';
try
Res := LHCheck(LHEncodeBuffer(Key, PlainText , Length(PlainText) * SizeOf(PlainText[1]), Data));
try
SetString(CipherText, PChar(Data), Res);
ShowMessage(CipherText);
finally
FreeMem(Data);
end;
except
on E:
Exception do
ShowMessage('
Error: ' + E.
Message);
end;
try
Res := LHCheck(LHDecodeBuffer(Key, CipherText , Length(CipherText) * SizeOf(CipherText[1]), Data));
try
SetString(PlainText, PChar(Data), Res);
ShowMessage(PlainText);
// hier wird nur ein sehr großer ~ 1400/6000 Char großer Leertext ausgegeben, da Data leer ist
finally
FreeMem(Data);
end;
except
on E:
Exception do
ShowMessage('
Error: ' + E.
Message);
end;
end;
Anbei auch meine Testversion der LHSZ.pas.
Gruß Assertor