Skip to content

Commit 9bc2cac

Browse files
committed
Remove special treatment of strings in asserts
This was deprecated in PHP 7.2 as part of https://wiki.php.net/rfc/deprecations_php_7_2.
1 parent 46d38aa commit 9bc2cac

28 files changed

+54
-482
lines changed

UPGRADING

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ PHP 8.0 UPGRADE NOTES
4747
. mb_parse_str() can no longer be used without specifying a result array.
4848

4949
- Standard:
50+
. assert() will no longer evaluate string arguments, instead they will be
51+
treated like any other argument. assert($a == $b) should be used instead of
52+
assert('$a == $b'). The assert.quiet_eval ini directive and
53+
ASSERT_QUIET_EVAL constants have also been removed, as they would no longer
54+
have any effect.
5055
. parse_str() can no longer be used without specifying a result array.
5156

5257
========================================

Zend/tests/assert/bug70208.phpt

Lines changed: 0 additions & 24 deletions
This file was deleted.

Zend/tests/assert/indirect_var_access_misoptimization.phpt

Lines changed: 0 additions & 21 deletions
This file was deleted.

Zend/tests/dynamic_call_006.phpt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,6 @@ function test() {
1212
$func = 'get_defined_vars';
1313
$func();
1414

15-
$func = 'assert';
16-
$func('1==2');
17-
1815
$func = 'func_get_args';
1916
$func();
2017

@@ -34,8 +31,6 @@ Warning: Cannot call compact() dynamically in %s on line %d
3431

3532
Warning: Cannot call get_defined_vars() dynamically in %s on line %d
3633

37-
Warning: Cannot call assert() with string argument dynamically in %s on line %d
38-
3934
Warning: Cannot call func_get_args() dynamically in %s on line %d
4035

4136
Warning: Cannot call func_get_arg() dynamically in %s on line %d

ext/opcache/Optimizer/zend_optimizer.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -966,8 +966,6 @@ uint32_t zend_optimizer_classify_function(zend_string *name, uint32_t num_args)
966966
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
967967
} else if (zend_string_equals_literal(name, "get_defined_vars")) {
968968
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
969-
} else if (zend_string_equals_literal(name, "assert")) {
970-
return ZEND_FUNC_INDIRECT_VAR_ACCESS;
971969
} else if (zend_string_equals_literal(name, "func_num_args")) {
972970
return ZEND_FUNC_VARARG;
973971
} else if (zend_string_equals_literal(name, "func_get_arg")) {

ext/standard/assert.c

Lines changed: 5 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ ZEND_BEGIN_MODULE_GLOBALS(assert)
2929
zend_bool active;
3030
zend_bool bail;
3131
zend_bool warning;
32-
zend_bool quiet_eval;
3332
zend_bool exception;
3433
ZEND_END_MODULE_GLOBALS(assert)
3534

@@ -46,7 +45,6 @@ enum {
4645
ASSERT_CALLBACK,
4746
ASSERT_BAIL,
4847
ASSERT_WARNING,
49-
ASSERT_QUIET_EVAL,
5048
ASSERT_EXCEPTION
5149
};
5250

@@ -81,7 +79,6 @@ PHP_INI_BEGIN()
8179
STD_PHP_INI_ENTRY("assert.bail", "0", PHP_INI_ALL, OnUpdateBool, bail, zend_assert_globals, assert_globals)
8280
STD_PHP_INI_ENTRY("assert.warning", "1", PHP_INI_ALL, OnUpdateBool, warning, zend_assert_globals, assert_globals)
8381
PHP_INI_ENTRY("assert.callback", NULL, PHP_INI_ALL, OnChangeCallback)
84-
STD_PHP_INI_ENTRY("assert.quiet_eval", "0", PHP_INI_ALL, OnUpdateBool, quiet_eval, zend_assert_globals, assert_globals)
8582
STD_PHP_INI_ENTRY("assert.exception", "0", PHP_INI_ALL, OnUpdateBool, exception, zend_assert_globals, assert_globals)
8683
PHP_INI_END()
8784

@@ -104,7 +101,6 @@ PHP_MINIT_FUNCTION(assert) /* {{{ */
104101
REGISTER_LONG_CONSTANT("ASSERT_CALLBACK", ASSERT_CALLBACK, CONST_CS|CONST_PERSISTENT);
105102
REGISTER_LONG_CONSTANT("ASSERT_BAIL", ASSERT_BAIL, CONST_CS|CONST_PERSISTENT);
106103
REGISTER_LONG_CONSTANT("ASSERT_WARNING", ASSERT_WARNING, CONST_CS|CONST_PERSISTENT);
107-
REGISTER_LONG_CONSTANT("ASSERT_QUIET_EVAL", ASSERT_QUIET_EVAL, CONST_CS|CONST_PERSISTENT);
108104
REGISTER_LONG_CONSTANT("ASSERT_EXCEPTION", ASSERT_EXCEPTION, CONST_CS|CONST_PERSISTENT);
109105

110106
INIT_CLASS_ENTRY(ce, "AssertionError", NULL);
@@ -147,9 +143,6 @@ PHP_FUNCTION(assert)
147143
{
148144
zval *assertion;
149145
zval *description = NULL;
150-
int val;
151-
char *myeval = NULL;
152-
char *compiled_string_description;
153146

154147
if (! ASSERTG(active)) {
155148
RETURN_TRUE;
@@ -161,51 +154,7 @@ PHP_FUNCTION(assert)
161154
Z_PARAM_ZVAL(description)
162155
ZEND_PARSE_PARAMETERS_END();
163156

164-
if (Z_TYPE_P(assertion) == IS_STRING) {
165-
zval retval;
166-
int old_error_reporting = 0; /* shut up gcc! */
167-
168-
if (zend_forbid_dynamic_call("assert() with string argument") == FAILURE) {
169-
RETURN_FALSE;
170-
}
171-
172-
php_error_docref(NULL, E_DEPRECATED, "Calling assert() with a string argument is deprecated");
173-
174-
myeval = Z_STRVAL_P(assertion);
175-
176-
if (ASSERTG(quiet_eval)) {
177-
old_error_reporting = EG(error_reporting);
178-
EG(error_reporting) = 0;
179-
}
180-
181-
compiled_string_description = zend_make_compiled_string_description("assert code");
182-
if (zend_eval_stringl(myeval, Z_STRLEN_P(assertion), &retval, compiled_string_description) == FAILURE) {
183-
efree(compiled_string_description);
184-
if (!description) {
185-
zend_throw_error(NULL, "Failure evaluating code: %s%s", PHP_EOL, myeval);
186-
} else {
187-
zend_string *str = zval_get_string(description);
188-
zend_throw_error(NULL, "Failure evaluating code: %s%s:\"%s\"", PHP_EOL, ZSTR_VAL(str), myeval);
189-
zend_string_release_ex(str, 0);
190-
}
191-
if (ASSERTG(bail)) {
192-
zend_bailout();
193-
}
194-
RETURN_FALSE;
195-
}
196-
efree(compiled_string_description);
197-
198-
if (ASSERTG(quiet_eval)) {
199-
EG(error_reporting) = old_error_reporting;
200-
}
201-
202-
convert_to_boolean(&retval);
203-
val = Z_TYPE(retval) == IS_TRUE;
204-
} else {
205-
val = zend_is_true(assertion);
206-
}
207-
208-
if (val) {
157+
if (zend_is_true(assertion)) {
209158
RETURN_TRUE;
210159
}
211160

@@ -220,8 +169,8 @@ PHP_FUNCTION(assert)
220169
const char *filename = zend_get_executed_filename();
221170

222171
ZVAL_STRING(&args[0], SAFE_STRING(filename));
223-
ZVAL_LONG (&args[1], lineno);
224-
ZVAL_STRING(&args[2], SAFE_STRING(myeval));
172+
ZVAL_LONG(&args[1], lineno);
173+
ZVAL_NULL(&args[2]);
225174

226175
ZVAL_FALSE(&retval);
227176

@@ -255,18 +204,10 @@ PHP_FUNCTION(assert)
255204
}
256205
} else if (ASSERTG(warning)) {
257206
if (!description) {
258-
if (myeval) {
259-
php_error_docref(NULL, E_WARNING, "Assertion \"%s\" failed", myeval);
260-
} else {
261-
php_error_docref(NULL, E_WARNING, "Assertion failed");
262-
}
207+
php_error_docref(NULL, E_WARNING, "Assertion failed");
263208
} else {
264209
zend_string *str = zval_get_string(description);
265-
if (myeval) {
266-
php_error_docref(NULL, E_WARNING, "%s: \"%s\" failed", ZSTR_VAL(str), myeval);
267-
} else {
268-
php_error_docref(NULL, E_WARNING, "%s failed", ZSTR_VAL(str));
269-
}
210+
php_error_docref(NULL, E_WARNING, "%s failed", ZSTR_VAL(str));
270211
zend_string_release_ex(str, 0);
271212
}
272213
}
@@ -320,18 +261,6 @@ PHP_FUNCTION(assert_options)
320261
RETURN_LONG(oldint);
321262
break;
322263

323-
case ASSERT_QUIET_EVAL:
324-
oldint = ASSERTG(quiet_eval);
325-
if (ac == 2) {
326-
zend_string *value_str = zval_get_string(value);
327-
key = zend_string_init("assert.quiet_eval", sizeof("assert.quiet_eval")-1, 0);
328-
zend_alter_ini_entry_ex(key, value_str, PHP_INI_USER, PHP_INI_STAGE_RUNTIME, 0);
329-
zend_string_release_ex(key, 0);
330-
zend_string_release_ex(value_str, 0);
331-
}
332-
RETURN_LONG(oldint);
333-
break;
334-
335264
case ASSERT_WARNING:
336265
oldint = ASSERTG(warning);
337266
if (ac == 2) {

ext/standard/tests/assert/assert.phpt

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,41 @@
11
--TEST--
22
assert()
33
--INI--
4-
error_reporting = 2039
54
assert.active = 0
65
assert.warning = 1
76
assert.callback =
87
assert.bail = 0
9-
assert.quiet_eval = 0
108
--FILE--
119
<?php
12-
function a($file,$line,$myev)
10+
function a($file, $line, $unused, $desc)
1311
{
14-
echo "assertion failed $line,\"$myev\"\n";
12+
echo "assertion failed $line,\"$desc\"\n";
1513
}
1614

1715
class a
1816
{
19-
function assert($file,$line,$myev)
17+
static function assert($file, $line, $unused, $desc)
2018
{
21-
echo "class assertion failed $line,\"$myev\"\n";
19+
echo "class assertion failed $line,\"$desc\"\n";
2220
}
2321
}
2422

2523
assert_options(ASSERT_ACTIVE,1);
26-
assert_options(ASSERT_QUIET_EVAL,1);
2724
assert_options(ASSERT_WARNING,0);
2825

2926
$a = 0;
3027

3128
assert_options(ASSERT_CALLBACK,"a");
32-
assert('$a != 0');
29+
assert($a != 0);
3330

3431
assert_options(ASSERT_CALLBACK,array("a","assert"));
35-
assert('$a != 0');
32+
assert($a != 0);
3633

3734
$obj = new a();
3835
assert_options(ASSERT_CALLBACK,array(&$obj,"assert"));
39-
assert('$a != 0');
36+
assert($a != 0);
4037
?>
4138
--EXPECT--
42-
assertion failed 22,"$a != 0"
43-
class assertion failed 25,"$a != 0"
44-
class assertion failed 29,"$a != 0"
39+
assertion failed 21,"assert($a != 0)"
40+
class assertion failed 24,"assert($a != 0)"
41+
class assertion failed 28,"assert($a != 0)"

ext/standard/tests/assert/assert02.phpt

Lines changed: 0 additions & 64 deletions
This file was deleted.

0 commit comments

Comments
 (0)