tbug753.pp 696 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. {$MODE objfpc}
  2. {$H+}
  3. program stackcrash;
  4. uses
  5. {$ifdef go32v2}
  6. dpmiexcp,
  7. {$endif go32v2}
  8. sysutils;
  9. type
  10. TMyClass = class
  11. public
  12. procedure Proc1;
  13. procedure Proc2;
  14. end;
  15. procedure TMyClass.Proc1;
  16. var
  17. x, y: Integer;
  18. begin
  19. try
  20. exit;
  21. except
  22. on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
  23. end;
  24. end;
  25. procedure TMyClass.Proc2;
  26. var
  27. x: array[0..7] of Byte;
  28. crash: Boolean;
  29. begin
  30. crash := True; // <--- ! This corrupts the stack?!?
  31. raise Exception.Create('I will crash now...');
  32. end;
  33. var
  34. obj: TMyClass;
  35. begin
  36. obj := TMyClass.Create;
  37. obj.Proc1;
  38. WriteLn('Proc1 done, calling Proc2...');
  39. obj.Proc2;
  40. WriteLn('Proc2 done');
  41. end.