diff options
author | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-06-19 12:24:59 +0000 |
---|---|---|
committer | michael <michael@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2019-06-19 12:24:59 +0000 |
commit | 43279c8b2ebb159cd6be7c3f640b0dc2e1270fd6 (patch) | |
tree | 8ae223ba68e84b5bbe0d9445de4fc11ef0de2392 | |
parent | c135c738c70d594635f8a6d015a6d345eb588f5d (diff) | |
download | fpc-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.pp | 23 |
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; |