diff options
Diffstat (limited to 'Zend/zend_API.h')
-rw-r--r-- | Zend/zend_API.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Zend/zend_API.h b/Zend/zend_API.h index e17be4ce68..3e191b63eb 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -654,6 +654,20 @@ END_EXTERN_C() } while (0) #define RETURN_ZVAL_FAST(z) { RETVAL_ZVAL_FAST(z); return; } +/* Check that returned string length fits int */ +#define RETVAL_STRINGL_CHECK(s, len, dup) \ + size_t __len = (len); \ + if (UNEXPECTED(__len > INT_MAX)) { \ + php_error_docref(NULL TSRMLS_CC, E_WARNING, "String too long, max is %d", INT_MAX); \ + if(!(dup)) { \ + efree((s)); \ + } \ + RETURN_FALSE; \ + } \ + RETVAL_STRINGL((s), __len, (dup)) + + + #define SET_VAR_STRING(n, v) { \ { \ zval *var; \ |