123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- {$MODE objfpc}
- {$H+}
- {
- Don't forget break,continue support
- }
- program stackcrash;
- uses sysutils;
- type
- TMyClass = class
- public
- procedure Proc1;
- procedure Proc2;
- end;
- procedure TMyClass.Proc1;
- var
- x, y: Integer;
- begin
- try
- exit;
- except
- on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
- end;
- end;
- procedure TMyClass.Proc2;
- var
- x: array[0..7] of Byte;
- crash: Boolean;
- begin
- crash := True; // <--- ! This corrupts the stack?!?
- raise Exception.Create('I will crash now...');
- end;
- var
- obj: TMyClass;
- begin
- obj := TMyClass.Create;
- obj.Proc1;
- WriteLn('Proc1 done, calling Proc2...');
- obj.Proc2;
- WriteLn('Proc2 done');
- end.
|