Reading Delta from stream causes content damage in BLOB data (release 101.1295)

…bug detected inside of unit uDADataStreamerSupport.pas, public method Bin2_ReadVariantFromStream, see attached example.

Suggested hotfix:

// this is new method to read blob data from stream
function Bin2_ReadBlobFromStream(Stream: TStream): Variant;
var
  p: pointer;
  lSize: cardinal;
begin
  lSize:= Bin2_ReadIntegerFromStream(Stream);
  Result:= VarArrayCreate([0, lSize - 1], varByte);
  p := VarArrayLock(Result);
  try
    Stream.ReadBuffer(p^, lSize);
  finally
    VarArrayUnlock(Result);
  end;
end;

function Bin2_ReadVariantFromStream(Stream: TStream; DataType: TDADataType): Variant;
begin
  case Datatype of
    datFixedWideChar, datWideString,datWideMemo, datXml: Result := Bin2_ReadWidestringFromStream2(Stream);
    datFixedChar, datString, datMemo{, DatBlob}: Result := Bin2_ReadAnsistringFromStream(Stream);
    // read BLOB data using new dedicated method
    datBlob: Result:= Bin2_ReadBlobFromStream(Stream);
    ..
  else
    Result := varNull;
  end;
end;

Regards from Prague,
Jaroslav

daSample.zip (52.6 KB)

Thanks, logged as bugs://77899

bugs://77899 got closed with status fixed.