bug0306.pp 701 B

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