]> granicus.if.org Git - php/commitdiff
Add consistency check in FAST_ZPP call
authorRemi Collet <remi@php.net>
Tue, 19 May 2015 08:54:10 +0000 (10:54 +0200)
committerRemi Collet <remi@php.net>
Tue, 19 May 2015 08:54:10 +0000 (10:54 +0200)
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

index 1c1aafbdcee600a6dab9f376eed7769a2e3cb2ae..7de97ff3364bf6db001f78aa1fd186298e2dd42d 100644 (file)
@@ -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); \