mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-18 13:39:11 +02:00
Try to minimize (NOT a fix) the risks of TProcessUtf8 crashes. Crash introduced in r50595 #d0dace2bf5 for issue #28991 / See also issue #035991
git-svn-id: trunk@61736 -
This commit is contained in:
parent
4bfff289c6
commit
bf0028cac1
@ -76,6 +76,7 @@ type
|
|||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
|
||||||
{$IFDEF UseTProcessW}
|
{$IFDEF UseTProcessW}
|
||||||
|
{$Optimization -ORDERFIELDS }
|
||||||
const
|
const
|
||||||
SNoCommandLine = 'Cannot execute empty command-line';
|
SNoCommandLine = 'Cannot execute empty command-line';
|
||||||
SErrCannotExecute = 'Failed to execute %s : %d';
|
SErrCannotExecute = 'Failed to execute %s : %d';
|
||||||
@ -565,7 +566,10 @@ var
|
|||||||
o: TProcessClassTemplate;
|
o: TProcessClassTemplate;
|
||||||
begin
|
begin
|
||||||
o:=TProcessClassTemplate.Create(nil);
|
o:=TProcessClassTemplate.Create(nil);
|
||||||
PHANDLE(Pointer(Self)+(@o.FProcessHandle-Pointer(o)))^:=aProcessHandle;
|
if (@o.FProcessHandle-Pointer(o) <= TProcessUTF8.InstanceSize - SizeOf(HANDLE)) and
|
||||||
|
(PHANDLE(Pointer(Self)+(@o.FProcessHandle-Pointer(o)))^ = ProcessHandle)
|
||||||
|
then
|
||||||
|
PHANDLE(Pointer(Self)+(@o.FProcessHandle-Pointer(o)))^:=aProcessHandle;
|
||||||
if aProcessHandle<>ProcessHandle then
|
if aProcessHandle<>ProcessHandle then
|
||||||
raise Exception.Create('TProcessUTF8.SetProcessHandle failed');
|
raise Exception.Create('TProcessUTF8.SetProcessHandle failed');
|
||||||
o.Free;
|
o.Free;
|
||||||
@ -576,7 +580,10 @@ var
|
|||||||
o: TProcessClassTemplate;
|
o: TProcessClassTemplate;
|
||||||
begin
|
begin
|
||||||
o:=TProcessClassTemplate.Create(nil);
|
o:=TProcessClassTemplate.Create(nil);
|
||||||
PHANDLE(Pointer(Self)+(@o.FThreadHandle-Pointer(o)))^:=aThreadHandle;
|
if (@o.FThreadHandle-Pointer(o) <= TProcessUTF8.InstanceSize - SizeOf(HANDLE)) and
|
||||||
|
(PHANDLE(Pointer(Self)+(@o.FThreadHandle-Pointer(o)))^ = ThreadHandle)
|
||||||
|
then
|
||||||
|
PHANDLE(Pointer(Self)+(@o.FThreadHandle-Pointer(o)))^:=aThreadHandle;
|
||||||
if aThreadHandle<>ThreadHandle then
|
if aThreadHandle<>ThreadHandle then
|
||||||
raise Exception.Create('TProcessUTF8.SetThreadHandle failed');
|
raise Exception.Create('TProcessUTF8.SetThreadHandle failed');
|
||||||
o.Free;
|
o.Free;
|
||||||
@ -587,7 +594,10 @@ var
|
|||||||
o: TProcessClassTemplate;
|
o: TProcessClassTemplate;
|
||||||
begin
|
begin
|
||||||
o:=TProcessClassTemplate.Create(nil);
|
o:=TProcessClassTemplate.Create(nil);
|
||||||
PHANDLE(Pointer(Self)+(@o.FProcessID-Pointer(o)))^:=aProcessID;
|
if (@o.FProcessID-Pointer(o) <= TProcessUTF8.InstanceSize - SizeOf(HANDLE)) and
|
||||||
|
(PHANDLE(Pointer(Self)+(@o.FProcessID-Pointer(o)))^ = ProcessID)
|
||||||
|
then
|
||||||
|
PHANDLE(Pointer(Self)+(@o.FProcessID-Pointer(o)))^:=aProcessID;
|
||||||
if aProcessID<>ProcessID then
|
if aProcessID<>ProcessID then
|
||||||
raise Exception.Create('TProcessUTF8.SetProcessID failed');
|
raise Exception.Create('TProcessUTF8.SetProcessID failed');
|
||||||
o.Free;
|
o.Free;
|
||||||
|
Loading…
Reference in New Issue
Block a user