In C/C++, signed integer overflow is undefined behavior, and some compilers (such as gcc) will optimize away checks like the one that was present in EvalScript; specifically:
int nBegin = ...; int nEnd = nBegin + size; if (nBegin < 0 || nEnd < nBegin)
will get compiled into:
if (nBegin < 0 || size < 0)
This patch changes the overflow check to avoid relying on the behavior of signed integer overflow, by checking for size > INT_MAX - nBegin (and computing nEnd after the check).