diff options
author | Remi Collet <remi@php.net> | 2015-05-19 10:54:10 +0200 |
---|---|---|
committer | Remi Collet <remi@php.net> | 2015-05-19 10:54:10 +0200 |
commit | a861019b7fdef1d8feb2bea9d7cceedd7ce55b30 (patch) | |
tree | 792b233f0a1ce353cf5beb3949af95263ef91849 | |
parent | b3d053b036e564e9bce6df705de8710823a43016 (diff) | |
download | php-git-a861019b7fdef1d8feb2bea9d7cceedd7ce55b30.tar.gz |
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.
-rw-r--r-- | Zend/zend_API.h | 4 |
1 files changed, 4 insertions, 0 deletions
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); \ |