1
0
mirror of https://github.com/salvadordf/CEF4Delphi.git synced 2025-06-12 22:07:39 +02:00

Fixed an access violation in TChromium.ShowDevTools with some Delphi versions

This commit is contained in:
Salvador Díaz Fau
2018-10-04 20:45:31 +02:00
parent a32686c7ef
commit 1624d8712d
3 changed files with 55 additions and 33 deletions

View File

@ -98,6 +98,11 @@ type
implementation
uses
{$IFDEF DELPHI16_UP}
System.Math,
{$ELSE}
Math,
{$ENDIF}
uCEFMiscFunctions, uCEFLibFunctions;
@ -246,18 +251,21 @@ end;
function TCefBytesWriteHandler.Write(const ptr: Pointer; size, n: NativeUInt): NativeUInt;
var
TempPointer : pointer;
TempSize : int64;
begin
EnterCriticalSection(FCriticalSection);
if ((FOffset + (size * n)) >= FBufferSize) and (Grow(size * n) = 0) then
TempSize := size * n;
if ((FOffset + TempSize) >= FBufferSize) and (Grow(TempSize) = 0) then
Result := 0
else
begin
TempPointer := Pointer(cardinal(FBuffer) + FOffset);
CopyMemory(TempPointer, ptr, size * n);
CopyMemory(TempPointer, ptr, TempSize);
FOffset := FOffset + (size * n);
FOffset := FOffset + TempSize;
Result := n;
end;
@ -337,21 +345,21 @@ end;
function TCefBytesWriteHandler.Grow(size : NativeUInt) : NativeUInt;
var
s : NativeUInt;
TempTotal : int64;
begin
EnterCriticalSection(FCriticalSection);
try
EnterCriticalSection(FCriticalSection);
if (size > FGrow) then
s := size
else
s := FGrow;
TempTotal := max(size, FGrow);
inc(TempTotal, FBufferSize);
ReallocMem(FBuffer, FBufferSize + s);
ReallocMem(FBuffer, TempTotal);
FBufferSize := FBufferSize + s;
Result := FBufferSize;
LeaveCriticalSection(FCriticalSection);
FBufferSize := TempTotal;
Result := FBufferSize;
finally
LeaveCriticalSection(FCriticalSection);
end;
end;
end.