diff --git a/src/text/scrptrun.cpp b/src/text/scrptrun.cpp index 750998764..bc16cb811 100644 --- a/src/text/scrptrun.cpp +++ b/src/text/scrptrun.cpp @@ -21,8 +21,13 @@ #pragma GCC diagnostic pop #include +#include -#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0])) +template +constexpr std::size_t ARRAY_SIZE(const T (&array)[N]) noexcept +{ + return N; +} const char ScriptRun::fgClassID=0; @@ -156,7 +161,8 @@ UBool ScriptRun::next() // characters above it on the stack will be poped. if (pairIndex >= 0) { if ((pairIndex & 1) == 0) { - parenStack[++parenSP].pairIndex = pairIndex; + parenSP = (++parenSP) % ARRAY_SIZE(parenStack); // avoid out-of-bounds access + parenStack[parenSP].pairIndex = pairIndex; parenStack[parenSP].scriptCode = scriptCode; } else if (parenSP >= 0) { int32_t pi = pairIndex & ~1;