summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-19 12:24:59 +0000
committermichael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2>2019-06-19 12:24:59 +0000
commit43279c8b2ebb159cd6be7c3f640b0dc2e1270fd6 (patch)
tree8ae223ba68e84b5bbe0d9445de4fc11ef0de2392
parentc135c738c70d594635f8a6d015a6d345eb588f5d (diff)
downloadfpc-43279c8b2ebb159cd6be7c3f640b0dc2e1270fd6.tar.gz
* Patch from Ondrej Pokorny to support streaming to position 0 (bug ID 35724)
git-svn-id: https://svn.freepascal.org/svn/fpc/trunk@42250 3ad0048d-3df7-0310-abae-a5850022a9f2
-rw-r--r--packages/fcl-base/src/blowfish.pp23
1 files changed, 20 insertions, 3 deletions
diff --git a/packages/fcl-base/src/blowfish.pp b/packages/fcl-base/src/blowfish.pp
index 04e4b584fa..bb886a50f1 100644
--- a/packages/fcl-base/src/blowfish.pp
+++ b/packages/fcl-base/src/blowfish.pp
@@ -59,8 +59,8 @@ Type
function GetPosition: Int64; override;
procedure InvalidSeek; override;
Public
- Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream);
- Constructor Create(Const KeyPhrase : String; Dest: TStream);
+ Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream); overload; virtual;
+ Constructor Create(Const KeyPhrase : String; Dest: TStream); overload;
Destructor Destroy; override;
Property BlowFish : TBlowFish Read FBF;
end;
@@ -74,7 +74,11 @@ Type
end;
TBlowFishDeCryptStream = Class(TBlowFishStream)
+ private
+ FSourcePos0: Int64;
public
+ Constructor Create(AKey : TBlowFishKey; AKeySize : Byte; Dest: TStream); override;
+
function Read(var Buffer; Count: Longint): Longint; override;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; override;
end;
@@ -652,6 +656,13 @@ end;
TBlowFishDecryptStream
---------------------------------------------------------------------}
+constructor TBlowFishDeCryptStream.Create(AKey: TBlowFishKey; AKeySize: Byte;
+ Dest: TStream);
+begin
+ inherited Create(AKey, AKeySize, Dest);
+
+ FSourcePos0 := Source.Position;
+end;
function TBlowFishDeCryptStream.Read(var Buffer; Count: Longint): Longint;
@@ -697,7 +708,13 @@ end;
function TBlowFishDeCryptStream.Seek(const Offset: Int64; Origin: TSeekOrigin): Int64;
begin
- FakeSeekForward(Offset,TSeekOrigin(Origin),FPos);
+ if (Offset=0) and (Origin=soBeginning) then
+ begin // support seek to beginning
+ FBufPos:=0;
+ FPos:=0;
+ Source.Position := FSourcePos0;
+ end else
+ FakeSeekForward(Offset,TSeekOrigin(Origin),FPos);
Result:=FPos;
end;