]> granicus.if.org Git - php/commitdiff
fixed segfaults and such things within the new assert02.phpt test
authorNuno Lopes <nlopess@php.net>
Sat, 1 Jul 2006 12:21:07 +0000 (12:21 +0000)
committerNuno Lopes <nlopess@php.net>
Sat, 1 Jul 2006 12:21:07 +0000 (12:21 +0000)
ext/standard/assert.c
ext/standard/tests/assert/assert02.phpt [new file with mode: 0644]

index 7e9159a8b4b9703f64ba85c63ce8a505b3d2d931..b123f09b1ac68c037895329f613ea33704f56e74 100644 (file)
@@ -152,7 +152,10 @@ PHP_FUNCTION(assert)
                if (zend_eval_string(myeval, &retval, compiled_string_description TSRMLS_CC) == FAILURE) {
                        efree(compiled_string_description);
                        php_error_docref(NULL TSRMLS_CC, E_RECOVERABLE_ERROR, "Failure evaluating code: %s%s", PHP_EOL, myeval);
-                       /* php_error_docref() does not return in this case. */
+                       if (ASSERTG(bail)) {
+                               zend_bailout();
+                       }
+                       RETURN_FALSE;
                }
                efree(compiled_string_description);
 
diff --git a/ext/standard/tests/assert/assert02.phpt b/ext/standard/tests/assert/assert02.phpt
new file mode 100644 (file)
index 0000000..4e09fc3
--- /dev/null
@@ -0,0 +1,42 @@
+--TEST--
+catch assert() errors
+--FILE--
+<?php
+function handler($errno, $errstr) {
+       echo "in handler()\n";
+       assert(E_RECOVERABLE_ERROR === $errno);
+       var_dump($errstr);
+}
+
+set_error_handler('handler', E_RECOVERABLE_ERROR);
+
+assert(1);
+assert('1');
+assert('$a');
+
+assert('aa=sd+as+safsafasfaçsafçsafç');
+
+assert('0');
+
+assert_options(ASSERT_BAIL, 1);
+assert('aa=sd+as+safsafasfaçsafçsafç');
+
+echo "done\n";
+
+?>
+--EXPECTF--
+Notice: Undefined variable: a in %sassert02.php(12) : assert code on line 1
+
+Warning: assert(): Assertion "$a" failed in %sassert02.php on line 12
+
+Parse error: syntax error, unexpected '=' in %sassert02.php(14) : assert code on line 1
+in handler()
+string(64) "assert(): Failure evaluating code: 
+aa=sd+as+safsafasfaçsafçsafç"
+
+Warning: assert(): Assertion "0" failed in %sassert02.php on line 16
+
+Parse error: syntax error, unexpected '=' in %sassert02.php(19) : assert code on line 1
+in handler()
+string(64) "assert(): Failure evaluating code: 
+aa=sd+as+safsafasfaçsafçsafç"