diff options
author | Dmitry Stogov <dmitry@php.net> | 2008-07-24 13:46:28 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2008-07-24 13:46:28 +0000 |
commit | 2cca3d0dd20eb58adbbee020095f989e164d63e5 (patch) | |
tree | 72c2dd336331617a22d2fbbf994cf36239df3393 /Zend/zend_alloc.c | |
parent | e29684a2cea5bf4f9f55eea5fa7f6262b8c00376 (diff) | |
download | php-git-2cca3d0dd20eb58adbbee020095f989e164d63e5.tar.gz |
Optimized ZEND_SIGNED_MULTIPLY_LONG() (Matt)
Diffstat (limited to 'Zend/zend_alloc.c')
-rw-r--r-- | Zend/zend_alloc.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/Zend/zend_alloc.c b/Zend/zend_alloc.c index 856abc6711..67b415e056 100644 --- a/Zend/zend_alloc.c +++ b/Zend/zend_alloc.c @@ -2355,6 +2355,19 @@ static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) return res; } +#elif SIZEOF_SIZE_T == 4 && defined(HAVE_ZEND_LONG64) + +static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) +{ + zend_ulong64 res = (zend_ulong64)nmemb * (zend_ulong64)size + (zend_ulong64)offset; + + if (UNEXPECTED(res > (zend_ulong64)0xFFFFFFFFL)) { + zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); + return 0; + } + return (size_t) res; +} + #else static inline size_t safe_address(size_t nmemb, size_t size, size_t offset) |