From a861019b7fdef1d8feb2bea9d7cceedd7ce55b30 Mon Sep 17 00:00:00 2001 From: Remi Collet Date: Tue, 19 May 2015 10:54:10 +0200 Subject: [PATCH] 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. --- Zend/zend_API.h | 4 ++++ 1 file changed, 4 insertions(+) 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); \ -- 2.50.1