From: Remi Collet Date: Tue, 19 May 2015 08:54:10 +0000 (+0200) Subject: Add consistency check in FAST_ZPP call X-Git-Tag: PRE_PHP7_NSAPI_REMOVAL~42^2~42^2 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a861019b7fdef1d8feb2bea9d7cceedd7ce55b30;p=php Add consistency check in FAST_ZPP call So ensure Z_PARAM_OPTIONAL is correctly call at the right place Only in DEBUG build Will raise 'Assertion `_i > _min_num_args || _optional==0' failed.' or 'Assertion `_i <= _min_num_args || _optional==1' failed.' Thus will allow to detect bad code early. --- diff --git a/Zend/zend_API.h b/Zend/zend_API.h index 1c1aafbdce..7de97ff336 100644 --- a/Zend/zend_API.h +++ b/Zend/zend_API.h @@ -774,6 +774,8 @@ ZEND_API void ZEND_FASTCALL zend_wrong_callback_error(int severity, int num, cha #define Z_PARAM_PROLOGUE(separate) \ ++_i; \ + ZEND_ASSERT(_i <= _min_num_args || _optional==1); \ + ZEND_ASSERT(_i > _min_num_args || _optional==0); \ if (_optional) { \ if (UNEXPECTED(_i >_num_args)) break; \ } \ @@ -1011,6 +1013,8 @@ ZEND_API void ZEND_FASTCALL zend_wrong_callback_error(int severity, int num, cha zend_parse_arg_zval_deref(_arg, &dest, check_null); \ } else { \ ++_i; \ + ZEND_ASSERT(_i <= _min_num_args || _optional==1); \ + ZEND_ASSERT(_i > _min_num_args || _optional==0); \ if (_optional && UNEXPECTED(_i >_num_args)) break; \ _real_arg++; \ zend_parse_arg_zval(_real_arg, &dest, check_null); \