}
// Nor too big
- if (nSize > INT_MAX)
+ if (nSize > (INT_MAX - (int)sizeof(CHStringData)) / (int)sizeof(WCHAR))
{
RaiseException(STATUS_INTEGER_OVERFLOW, EXCEPTION_NONCONTINUABLE, 0, 0);
}
}
// Ensure we wouldn't overflow with the concat
- if (GetData()->nDataLength + nSrcLen > INT_MAX)
+ if (GetData()->nDataLength > INT_MAX - nSrcLen)
{
RaiseException(STATUS_INTEGER_OVERFLOW, EXCEPTION_NONCONTINUABLE, 0, 0);
}
else
{
// Ensure we don't overflow
- if (nSrcLen > INT_MAX)
+ if (nSrcLen > INT_MAX - GetData()->nDataLength)
{
RaiseException(STATUS_INTEGER_OVERFLOW, EXCEPTION_NONCONTINUABLE, 0, 0);
}