mirror of
https://github.com/ChaiScript/ChaiScript.git
synced 2026-06-15 08:26:16 +08:00
* Fix #633: Bound ChaiScript call stack to prevent native stack overflow Recursive user-defined operators (e.g. a `string::/=` whose body calls itself through string interpolation) drove the AST evaluator into unbounded native recursion and crashed the host process with SIGSEGV. The dispatcher now refuses to enter a new function frame once `Stack_Holder::call_depth` reaches `chaiscript::max_call_depth` (default 256, overridable via the `CHAISCRIPT_MAX_CALL_DEPTH` macro) and throws the new `chaiscript::exception::stack_overflow_error` instead, letting both ChaiScript-level `try`/`catch` and C++ hosts recover from runaway recursion. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Address review: tighten max_call_depth on MSVC Debug Windows MSVC Debug builds crashed unit.recursion_depth_protection.chai with SEGFAULT before the depth check could fire. Windows defaults to a 1 MiB thread stack and Debug builds emit much larger per-frame native stack usage (no inlining, /RTC, buffer security checks), so 256 nested ChaiScript calls overflow the native stack long before the dispatcher reaches max_call_depth. Linux/macOS and MSVC Release pass at 256. Pick a tighter default (32) only for the MSVC + _DEBUG configuration that needs it, leaving every other build at the original 256, and shrink the count_down recursion in the regression test so the bounded path stays well below every platform's default. Requested by @lefticus in PR #700 review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Address review: use CHAISCRIPT_DEBUG instead of _DEBUG Switch CHAISCRIPT_DEBUG from a true/false definition to 1/0 so it can be used in preprocessor #if expressions, then reuse it for the MSVC Debug guard around CHAISCRIPT_MAX_CALL_DEPTH instead of testing the compiler-private _DEBUG macro directly. The C++ debug_build constant keeps its bool value through implicit conversion. Requested by @lefticus in PR #700 review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Address review: restore CHAISCRIPT_DEBUG to true/false for stronger typing C++ preserves the true/false keywords in #if directives ([cpp.cond]), so the MSVC Debug guard around CHAISCRIPT_MAX_CALL_DEPTH still works without weakening the macro to integer 1/0. Requested by @lefticus in PR #700 review. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: leftibot <leftibot@users.noreply.github.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| chaiscript | ||