tb0263.pp 819 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. { %RESULT=217 }
  2. { Old file: tbs0306.pp }
  3. { Address is not popped with exit in try...except block OK 0.99.13 (PFV) }
  4. {$MODE objfpc}
  5. {$H+}
  6. {
  7. Don't forget break,continue support
  8. }
  9. program stackcrash;
  10. uses sysutils;
  11. type
  12. TMyClass = class
  13. public
  14. procedure Proc1;
  15. procedure Proc2;
  16. end;
  17. procedure TMyClass.Proc1;
  18. var
  19. x, y: Integer;
  20. begin
  21. try
  22. exit;
  23. except
  24. on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
  25. end;
  26. end;
  27. procedure TMyClass.Proc2;
  28. var
  29. x: array[0..7] of Byte;
  30. crash: Boolean;
  31. begin
  32. crash := True; // <--- ! This corrupts the stack?!?
  33. raise Exception.Create('I will crash now...');
  34. end;
  35. var
  36. obj: TMyClass;
  37. begin
  38. obj := TMyClass.Create;
  39. obj.Proc1;
  40. WriteLn('Proc1 done, calling Proc2...');
  41. obj.Proc2;
  42. WriteLn('Proc2 done');
  43. end.