From c49dbb9d9c2afd99c4a67162e9d34cbedead107d Mon Sep 17 00:00:00 2001 From: ondrej Date: Sat, 7 Mar 2020 13:57:26 +0000 Subject: [PATCH] fcl-db: fix memory corruption in bufdataset. Issue #36747 git-svn-id: trunk@44280 - --- packages/fcl-db/src/base/bufdataset.pas | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/fcl-db/src/base/bufdataset.pas b/packages/fcl-db/src/base/bufdataset.pas index f48dc3a1a6..21249846fd 100644 --- a/packages/fcl-db/src/base/bufdataset.pas +++ b/packages/fcl-db/src/base/bufdataset.pas @@ -2607,7 +2607,10 @@ begin if assigned(Buffer) then begin inc(CurrBuff,FFieldBufPositions[Field.FieldNo-1]); - Move(CurrBuff^, Buffer^, GetFieldSize(FieldDefs[Field.FieldNo-1])); + if Field.IsBlob then // we need GetFieldSize for BLOB but Field.DataSize for others - #36747 + Move(CurrBuff^, Buffer^, GetFieldSize(FieldDefs[Field.FieldNo-1])) + else + Move(CurrBuff^, Buffer^, Field.DataSize); end; Result := True; end @@ -2649,7 +2652,10 @@ begin inc(CurrBuff,FFieldBufPositions[Field.FieldNo-1]); if assigned(buffer) then begin - Move(Buffer^, CurrBuff^, GetFieldSize(FieldDefs[Field.FieldNo-1])); + if Field.IsBlob then // we need GetFieldSize for BLOB but Field.DataSize for others - #36747 + Move(Buffer^, CurrBuff^, GetFieldSize(FieldDefs[Field.FieldNo-1])) + else + Move(Buffer^, CurrBuff^, Field.DataSize); unSetFieldIsNull(NullMask,Field.FieldNo-1); end else