Skip to content

Commit e75171e

Browse files
committed
Merge branch 'master' of https://git.php.net/repository/php-src
* 'master' of https://git.php.net/repository/php-src: fix broken sha2 configure tests fix broken sha2 configure tests Small cleanup in class name resolution of compiler Fixed minor bug in test. Move NEWS entries to correct version
2 parents d59db90 + da30202 commit e75171e

File tree

5 files changed

+30
-47
lines changed

5 files changed

+30
-47
lines changed

Zend/zend_compile.c

Lines changed: 13 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -723,7 +723,7 @@ void zend_do_fetch_static_member(znode *result, znode *class_name TSRMLS_DC) /*
723723

724724
if (class_name->op_type == IS_CONST &&
725725
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
726-
zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
726+
zend_resolve_class_name(class_name TSRMLS_CC);
727727
class_node = *class_name;
728728
} else {
729729
zend_do_fetch_class(&class_node, class_name TSRMLS_CC);
@@ -1840,15 +1840,6 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, con
18401840
zend_arg_info *cur_arg_info;
18411841
znode var;
18421842

1843-
if (class_type->op_type == IS_CONST &&
1844-
Z_TYPE(class_type->u.constant) == IS_STRING &&
1845-
Z_STRLEN(class_type->u.constant) == 0) {
1846-
/* Usage of namespace as class name not in namespace */
1847-
zval_dtor(&class_type->u.constant);
1848-
zend_error(E_COMPILE_ERROR, "Cannot use 'namespace' as a class name");
1849-
return;
1850-
}
1851-
18521843
if (zend_is_auto_global_quick(Z_STRVAL(varname->u.constant), Z_STRLEN(varname->u.constant), 0 TSRMLS_CC)) {
18531844
zend_error(E_COMPILE_ERROR, "Cannot re-assign auto-global variable %s", Z_STRVAL(varname->u.constant));
18541845
} else {
@@ -1913,7 +1904,7 @@ void zend_do_receive_arg(zend_uchar op, znode *varname, const znode *offset, con
19131904
} else {
19141905
cur_arg_info->type_hint = IS_OBJECT;
19151906
if (ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_type->u.constant), Z_STRLEN(class_type->u.constant))) {
1916-
zend_resolve_class_name(class_type, opline->extended_value, 1 TSRMLS_CC);
1907+
zend_resolve_class_name(class_type TSRMLS_CC);
19171908
}
19181909
Z_STRVAL(class_type->u.constant) = (char*)zend_new_interned_string(class_type->u.constant.value.str.val, class_type->u.constant.value.str.len + 1, 1 TSRMLS_CC);
19191910
cur_arg_info->class_name = class_type->u.constant.value.str.val;
@@ -2164,7 +2155,7 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static
21642155
zend_do_fetch_constant(result, class_name, &constant_name, ZEND_RT, 1 TSRMLS_CC);
21652156
break;
21662157
case ZEND_FETCH_CLASS_DEFAULT:
2167-
zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
2158+
zend_resolve_class_name(class_name TSRMLS_CC);
21682159
*result = *class_name;
21692160
break;
21702161
}
@@ -2174,7 +2165,7 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static
21742165
}
21752166
/* }}} */
21762167

2177-
void zend_resolve_class_name(znode *class_name, ulong fetch_type, int check_ns_name TSRMLS_DC) /* {{{ */
2168+
void zend_resolve_class_name(znode *class_name TSRMLS_DC) /* {{{ */
21782169
{
21792170
char *compound;
21802171
char *lcname;
@@ -2253,21 +2244,12 @@ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */
22532244
long fetch_class_op_number;
22542245
zend_op *opline;
22552246

2256-
if (class_name->op_type == IS_CONST &&
2257-
Z_TYPE(class_name->u.constant) == IS_STRING &&
2258-
Z_STRLEN(class_name->u.constant) == 0) {
2259-
/* Usage of namespace as class name not in namespace */
2260-
zval_dtor(&class_name->u.constant);
2261-
zend_error(E_COMPILE_ERROR, "Cannot use 'namespace' as a class name");
2262-
return;
2263-
}
2264-
22652247
fetch_class_op_number = get_next_op_number(CG(active_op_array));
22662248
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
22672249

22682250
opline->opcode = ZEND_FETCH_CLASS;
22692251
SET_UNUSED(opline->op1);
2270-
opline->extended_value = ZEND_FETCH_CLASS_GLOBAL;
2252+
opline->extended_value = ZEND_FETCH_CLASS_DEFAULT;
22712253
CG(catch_begin) = fetch_class_op_number;
22722254
if (class_name->op_type == IS_CONST) {
22732255
int fetch_type;
@@ -2282,7 +2264,7 @@ void zend_do_fetch_class(znode *result, znode *class_name TSRMLS_DC) /* {{{ */
22822264
zval_dtor(&class_name->u.constant);
22832265
break;
22842266
default:
2285-
zend_resolve_class_name(class_name, opline->extended_value, 0 TSRMLS_CC);
2267+
zend_resolve_class_name(class_name TSRMLS_CC);
22862268
opline->op2_type = IS_CONST;
22872269
opline->op2.constant =
22882270
zend_add_class_name_literal(CG(active_op_array), &class_name->u.constant TSRMLS_CC);
@@ -2458,7 +2440,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na
24582440

24592441
if (class_name->op_type == IS_CONST &&
24602442
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
2461-
zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
2443+
zend_resolve_class_name(class_name TSRMLS_CC);
24622444
class_node = *class_name;
24632445
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
24642446
} else {
@@ -2896,7 +2878,7 @@ void zend_do_begin_catch(znode *catch_token, znode *class_name, znode *catch_var
28962878

28972879
if (class_name->op_type == IS_CONST &&
28982880
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
2899-
zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
2881+
zend_resolve_class_name(class_name TSRMLS_CC);
29002882
catch_class = *class_name;
29012883
} else {
29022884
zend_error(E_COMPILE_ERROR, "Bad class name in the catch statement");
@@ -4470,7 +4452,7 @@ void zend_prepare_reference(znode *result, znode *class_name, znode *method_name
44704452
/* REM: There should not be a need for copying,
44714453
zend_do_begin_class_declaration is also just using that string */
44724454
if (class_name) {
4473-
zend_resolve_class_name(class_name, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC);
4455+
zend_resolve_class_name(class_name TSRMLS_CC);
44744456
method_ref->class_name = Z_STRVAL(class_name->u.constant);
44754457
method_ref->cname_len = Z_STRLEN(class_name->u.constant);
44764458
} else {
@@ -5171,7 +5153,7 @@ void zend_do_implements_interface(znode *interface_name TSRMLS_DC) /* {{{ */
51715153
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
51725154
opline->opcode = ZEND_ADD_INTERFACE;
51735155
SET_NODE(opline->op1, &CG(implementing_class));
5174-
zend_resolve_class_name(interface_name, opline->extended_value, 0 TSRMLS_CC);
5156+
zend_resolve_class_name(interface_name TSRMLS_CC);
51755157
opline->extended_value = (opline->extended_value & ~ZEND_FETCH_CLASS_MASK) | ZEND_FETCH_CLASS_INTERFACE;
51765158
opline->op2_type = IS_CONST;
51775159
opline->op2.constant = zend_add_class_name_literal(CG(active_op_array), &interface_name->u.constant TSRMLS_CC);
@@ -5203,7 +5185,7 @@ void zend_do_use_trait(znode *trait_name TSRMLS_DC) /* {{{ */
52035185
opline = get_next_op(CG(active_op_array) TSRMLS_CC);
52045186
opline->opcode = ZEND_ADD_TRAIT;
52055187
SET_NODE(opline->op1, &CG(implementing_class));
5206-
zend_resolve_class_name(trait_name, opline->extended_value, 0 TSRMLS_CC);
5188+
zend_resolve_class_name(trait_name TSRMLS_CC);
52075189
opline->extended_value = ZEND_FETCH_CLASS_TRAIT;
52085190
opline->op2_type = IS_CONST;
52095191
opline->op2.constant = zend_add_class_name_literal(CG(active_op_array), &trait_name->u.constant TSRMLS_CC);
@@ -5582,7 +5564,7 @@ void zend_do_fetch_constant(znode *result, znode *constant_container, znode *con
55825564
if (ZEND_FETCH_CLASS_STATIC == type) {
55835565
zend_error(E_ERROR, "\"static::\" is not allowed in compile-time constants");
55845566
} else if (ZEND_FETCH_CLASS_DEFAULT == type) {
5585-
zend_resolve_class_name(constant_container, fetch_type, 1 TSRMLS_CC);
5567+
zend_resolve_class_name(constant_container TSRMLS_CC);
55865568
}
55875569
zend_do_build_full_name(NULL, constant_container, constant_name, 1 TSRMLS_CC);
55885570
*result = *constant_container;
@@ -5591,7 +5573,7 @@ void zend_do_fetch_constant(znode *result, znode *constant_container, znode *con
55915573
case ZEND_RT:
55925574
if (constant_container->op_type == IS_CONST &&
55935575
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(constant_container->u.constant), Z_STRLEN(constant_container->u.constant))) {
5594-
zend_resolve_class_name(constant_container, fetch_type, 1 TSRMLS_CC);
5576+
zend_resolve_class_name(constant_container TSRMLS_CC);
55955577
} else {
55965578
zend_do_fetch_class(&tmp, constant_container TSRMLS_CC);
55975579
constant_container = &tmp;

Zend/zend_compile.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ ZEND_API int zend_get_compiled_lineno(TSRMLS_D);
438438
ZEND_API size_t zend_get_scanned_file_offset(TSRMLS_D);
439439

440440
void zend_resolve_non_class_name(znode *element_name, zend_bool check_namespace TSRMLS_DC);
441-
void zend_resolve_class_name(znode *class_name, ulong fetch_type, int check_ns_name TSRMLS_DC);
441+
void zend_resolve_class_name(znode *class_name TSRMLS_DC);
442442
ZEND_API const char* zend_get_compiled_variable_name(const zend_op_array *op_array, zend_uint var, int* name_len);
443443

444444
#ifdef ZTS
@@ -726,8 +726,8 @@ int zend_add_literal(zend_op_array *op_array, const zval *zv TSRMLS_DC);
726726
#define ZEND_FETCH_CLASS_DEFAULT 0
727727
#define ZEND_FETCH_CLASS_SELF 1
728728
#define ZEND_FETCH_CLASS_PARENT 2
729-
#define ZEND_FETCH_CLASS_MAIN 3
730-
#define ZEND_FETCH_CLASS_GLOBAL 4
729+
#define ZEND_FETCH_CLASS_MAIN 3 /* unused */
730+
#define ZEND_FETCH_CLASS_GLOBAL 4 /* unused */
731731
#define ZEND_FETCH_CLASS_AUTO 5
732732
#define ZEND_FETCH_CLASS_INTERFACE 6
733733
#define ZEND_FETCH_CLASS_STATIC 7

Zend/zend_language_parser.y

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -629,8 +629,8 @@ trait_precedence:
629629
;
630630

631631
trait_reference_list:
632-
fully_qualified_class_name { zend_resolve_class_name(&$1, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC); zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); }
633-
| trait_reference_list ',' fully_qualified_class_name { zend_resolve_class_name(&$3, ZEND_FETCH_CLASS_GLOBAL, 1 TSRMLS_CC); zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; }
632+
fully_qualified_class_name { zend_resolve_class_name(&$1 TSRMLS_CC); zend_init_list(&$$.u.op.ptr, Z_STRVAL($1.u.constant) TSRMLS_CC); }
633+
| trait_reference_list ',' fully_qualified_class_name { zend_resolve_class_name(&$3 TSRMLS_CC); zend_add_to_list(&$1.u.op.ptr, Z_STRVAL($3.u.constant) TSRMLS_CC); $$ = $1; }
634634
;
635635

636636
trait_method_reference:

ext/spl/tests/bug64782.phpt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ var_dump(new SplFileObject(__FILE__, "r", false, null));
99
--EXPECTF--
1010
object(SplFileObject)#1 (%d) {
1111
["pathName":"SplFileInfo":private]=>
12-
string(50) "%s/bug64782.php"
12+
string(%d) "%s/bug64782.php"
1313
["fileName":"SplFileInfo":private]=>
1414
string(12) "bug64782.php"
1515
["openMode":"SplFileObject":private]=>

ext/standard/config.m4

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -182,12 +182,12 @@ AC_TRY_RUN([
182182
183183
main() {
184184
#if HAVE_CRYPT
185-
char salt[30], answer[80];
186-
187-
salt[0]='$'; salt[1]='6'; salt[2]='$'; salt[3]='$'; salt[4]='b'; salt[5]='a'; salt[6]='r'; salt[7]='\0';
185+
char salt[21], answer[21+86];
186+
187+
strcpy(salt,"\$6\$rasmuslerdorf\$");
188188
strcpy(answer, salt);
189-
strcpy(&answer[29],"$6$$QMXjqd7rHQZPQ1yHsXkQqC1FBzDiVfTHXL.LaeDAeVV.IzMaV9VU4MQ8kPuZa2SOP1A0RPm772EaFYjpEJtdu.");
190-
exit (strcmp((char *)crypt("foo",salt),answer));
189+
strcat(answer, "EeHCRjm0bljalWuALHSTs1NB9ipEiLEXLhYeXdOpx22gmlmVejnVXFhd84cEKbYxCo.XuUTrW.RLraeEnsvWs/");
190+
exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
191191
#else
192192
exit(0);
193193
#endif
@@ -211,12 +211,13 @@ AC_TRY_RUN([
211211
212212
main() {
213213
#if HAVE_CRYPT
214-
char salt[30], answer[80];
215-
salt[0]='$'; salt[1]='5'; salt[2]='$'; salt[3]='$'; salt[4]='s'; salt[5]='a'; salt[6]='l'; salt[7]='t'; salt[8]='s'; salt[9]='t'; salt[10]='r'; salt[11]='i'; salt[12]='n'; salt[13]='g'; salt[14]='\0';
216-
strcat(salt,"");
214+
char salt[21], answer[21+43];
215+
216+
strcpy(salt,"\$5\$rasmuslerdorf\$");
217217
strcpy(answer, salt);
218-
strcpy(&answer[29], "$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5");
219-
exit (strcmp((char *)crypt("foo",salt),answer));
218+
strcat(answer, "cFAm2puLCujQ9t.0CxiFIIvFi4JyQx5UncCt/xRIX23");
219+
exit (strcmp((char *)crypt("rasmuslerdorf",salt),answer));
220+
220221
#else
221222
exit(0);
222223
#endif

0 commit comments

Comments
 (0)