]> granicus.if.org Git - php/commitdiff
Fixed return value of assert_options(ASSERT_CALLBACK) and possible crash (Andy Wharmby)
authorDmitry Stogov <dmitry@php.net>
Fri, 16 Feb 2007 13:12:55 +0000 (13:12 +0000)
committerDmitry Stogov <dmitry@php.net>
Fri, 16 Feb 2007 13:12:55 +0000 (13:12 +0000)
ext/standard/assert.c
ext/standard/basic_functions.c

index a8aa022d81b977493b6f5ad22d5a86e84d7fdaba..0ce8b364718d78ac34675597e43154809e5c7a6d 100644 (file)
@@ -114,6 +114,16 @@ PHP_MSHUTDOWN_FUNCTION(assert)
        return SUCCESS;
 }
 
+PHP_RINIT_FUNCTION(assert)
+{
+       if (ASSERTG(cb)) {
+               MAKE_STD_ZVAL(ASSERTG(callback));
+               ZVAL_STRING(ASSERTG(callback), ASSERTG(cb), 1);
+       }
+
+       return SUCCESS;
+}
+
 PHP_RSHUTDOWN_FUNCTION(assert)
 {
        if (ASSERTG(callback)) { 
@@ -202,11 +212,6 @@ PHP_FUNCTION(assert)
                RETURN_TRUE;
        }
 
-       if (!ASSERTG(callback) && ASSERTG(cb)) {
-               MAKE_STD_ZVAL(ASSERTG(callback));
-               ZVAL_STRING(ASSERTG(callback), ASSERTG(cb), 1);
-       }
-
        if (ASSERTG(callback)) {
                zval *args[3];
                zval *retval;
@@ -309,6 +314,11 @@ PHP_FUNCTION(assert_options)
                break;
 
        case ASSERT_CALLBACK:
+               if (ASSERTG(callback) != NULL) {
+                       RETVAL_ZVAL(ASSERTG(callback), 1, 0);
+               } else {
+                       RETVAL_NULL();
+               }
                if (ac == 2) {
                        if (ASSERTG(callback)) {
                                zval_ptr_dtor(&ASSERTG(callback));
@@ -316,7 +326,7 @@ PHP_FUNCTION(assert_options)
                        ASSERTG(callback) = *value;
                        zval_add_ref(value);
                }
-               RETURN_TRUE;
+               return;
                break;
 
        default:
index 0fd0bae0aa7ff109e6143a20000e365d3d86d963..39392e6a812ea73f1b452d3eb1af11779d895282 100644 (file)
@@ -4147,6 +4147,7 @@ PHP_RINIT_FUNCTION(basic)
 #ifdef HAVE_SYSLOG_H
        PHP_RINIT(syslog)(INIT_FUNC_ARGS_PASSTHRU);
 #endif
+       PHP_RINIT(assert) (INIT_FUNC_ARGS_PASSTHRU);
        PHP_RINIT(dir)(INIT_FUNC_ARGS_PASSTHRU);
        PHP_RINIT(url_scanner_ex)(INIT_FUNC_ARGS_PASSTHRU);