Nikita Popov
e079e753dc
Give zend_pass_function an arginfo
...
Now that the ZEND_ACC_VARIADIC flag is set, we should also make
sure there is a variadic arg that can be looked up.
2020-07-21 16:01:45 +02:00
Máté Kocsis
5770b66722
Cleanup argument handling of Zend functions and methods
...
Closes GH-5847
2020-07-21 14:47:03 +02:00
Nikita Popov
c9881fde7a
Run arginfo / zpp mismatch tests for methods as well
...
As a side-effect, this also catches issues where classes are not
prepared for use with newInstanceWithoutConstructor.
2020-07-21 14:17:29 +02:00
Nikita Popov
38fb1f8383
Check for missing arginfo arguments
...
Internal functions error when too many arguments are passed. Make
this part of the verification we do in debug builds. This will
help avoid cases where an argument is missing in the stubs,
as recently encountered in 6d96f0f .
2020-07-21 14:17:29 +02:00
Nikita Popov
236ddc56a2
Preserve original ce_flags when registering class
...
Bug that regularly sneaks in: ZEND_ACC_FINAL is set before calling
zend_register_internal_class() and promptly gets ignored. Remove
this footgun by preserving flags from the original CE.
2020-07-20 17:00:04 +02:00
Nikita Popov
7fd4212cc0
Add common code for magic method assignment
...
This was repeated three times.
2020-07-20 14:57:10 +02:00
Nikita Popov
efce3694b7
Directly assign magic methods
...
Instead of going through intermediary variables.
2020-07-20 11:22:47 +02:00
Nikita Popov
91e5452b95
Remove unused lc_class_name variable
...
This is probably a leftover from "old style constructor" support.
2020-07-20 11:15:58 +02:00
Nikita Popov
19de727e04
Report magic method names as written
...
Report the name the way the user has written it, the same way we
always do.
2020-07-20 11:12:47 +02:00
Nikita Popov
149029b9d6
Unify magic method visibility check
...
This was missing entirely for the internal function case.
2020-07-20 11:12:47 +02:00
Nikita Popov
312fe2bdce
Unify magic method return type checks
2020-07-20 10:51:48 +02:00
Nikita Popov
fbbcf82ab7
Unify static/non-static check for magic methods
...
And promote it to be fatal.
2020-07-20 10:39:43 +02:00
Nikita Popov
b466e8b754
Add missing arg num check for __set_state
2020-07-20 10:20:29 +02:00
Nikita Popov
dcaf62f3d3
Clean up zend_check_magic_method_implementation
...
Let everything go through a common function, which fixes some
consistency issues.
2020-07-20 10:17:40 +02:00
Nikita Popov
f9ced0d4f7
Add missing zpp_none call in Exception::__wakeup
2020-07-17 16:06:54 +02:00
George Peter Banyard
fa60f57be4
Drop unused param in zend_parse_arg_class_name_or_obj()
2020-07-17 17:00:27 +02:00
Nikita Popov
86a62eb1fc
Fixed bug #79867
...
In line with usual rules, give untyped properties a null default
value. Otherwise constructor promotion would give you a property
declaration that cannot be achieved through any other means.
2020-07-17 15:10:45 +02:00
Benjamin Eberlei
6c8b94eb42
Introduce error notification callbacks that are run independant of zend_error_cb
2020-07-17 15:08:11 +02:00
Nikita Popov
6d96f0f9ce
Fix WeakReference::create() stub
2020-07-16 20:46:45 +02:00
Pedro Magalhães
272b887b7b
Ignore inheritance rules on private methods
...
Closes GH-5401
2020-07-15 17:09:57 +01:00
Nikita Popov
5785a15f4e
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Fixed bug #79862
2020-07-15 15:00:45 +02:00
Nikita Popov
e8430b592f
Fixed bug #79862
...
While normally a private property in the active scope would take
priority, we should not use this if it has the wrong "staticness".
2020-07-15 14:59:55 +02:00
Nikita Popov
f60cf0cfe7
Remove type argument from zend_get_zval_ptr
...
As pointed out by Levi, this is unused, and we already changed
the signature of this function for PHP 8.
2020-07-15 09:51:51 +02:00
Nikita Popov
70501b81a7
Fixed bug #79852
2020-07-14 12:31:06 +02:00
George Peter Banyard
4f3eccfd4d
Use consistent types
...
uint32_t type for argument count
size_t for length of char*
zend_bool for a zval bool arg
Closes GH-5845
2020-07-13 13:30:54 +02:00
Rowan Tommins
55a15f32ce
Improve output of tokens in Parse Errors
...
Currently, unexpected tokens in the parser are shown as the text
found, plus the internal token name, including the notorious
"unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM)".
This commit replaces that with a more user-friendly format, with
two main types of token:
* Tokens which always represent the same text are shown like
'unexpected token "::"' and 'expected "::"'
* Tokens which have variable text are given a user-friendly
name, and show like 'unexpected identifier "foo"', and
'expected identifer'.
A few tokens have special cases:
* unexpected token """ -> unexpected double-quote mark
* unexpected quoted string "'foo'" -> unexpected single-quoted
string "foo"
* unexpected quoted string ""foo"" -> unexpected double-quoted
string "foo"
* unexpected illegal character "_" -> unexpected character 0xNN
(where _ is almost certainly a control character, and NN is the
hexadecimal value of the byte)
The \ token has a special case in the implementation just to stop
bison making a mess of escaping it and it coming out as \\
2020-07-13 11:07:40 +02:00
Nikita Popov
213852de78
Fixed bug #79828
2020-07-13 09:55:13 +02:00
Ilija Tovilo
1c967df5a0
Fix free of uninitialized memory in MATCH_ERROR
...
As suggested by Tyson Andre:
https://github.com/php/php-src/pull/5371#issuecomment-657081464
Also fix line number of unhandled match error
Closes GH-5841.
2020-07-12 13:33:36 +02:00
Ilija Tovilo
d5a0370828
[skip ci] Consistent match test closing tags
2020-07-11 16:50:51 +02:00
Máté Kocsis
95cff3ebf2
Retain the original formatting character in test
2020-07-10 23:15:08 +02:00
Máté Kocsis
d30cd7d7e7
Review the usage of apostrophes in error messages
...
Closes GH-5590
2020-07-10 21:05:28 +02:00
George Peter Banyard
2297a6d364
Use dedicated function for illegal offset type error
2020-07-10 16:49:52 +02:00
Nikita Popov
5fc70243d7
Add missing addref for MATCH_ERROR operand
2020-07-10 15:58:42 +02:00
Nikita Popov
6556846754
Fixed bug #79818
...
Only destroy the variable directly before reassigning it. The
value could be read in the meantime.
2020-07-10 14:36:50 +02:00
twosee
b284ba3943
Add zend_wrong_parameter_error to reduce the size of ZPP macro
...
Closes GH-5831.
2020-07-10 10:12:23 +02:00
Ilija Tovilo
9fa1d13301
Implement match expression
...
RFC: https://wiki.php.net/rfc/match_expression_v2
Closes GH-5371.
2020-07-09 23:52:17 +02:00
George Peter Banyard
9839752a9c
Voidify some ZEND_API functions
...
Closes GH-5805
2020-07-09 14:15:57 +02:00
Nikita Popov
613a56d1cb
Remove FREE_UNFETCHED concept
...
In master normal FREE_OPs work like FREE_UNFETCHED_OP used to, so
there is no point in keeping this distinction anymore, it's just
confusing.
2020-07-09 11:58:33 +02:00
Nikita Popov
c05bfa362b
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Switch back to FREE_UNFETCHED_OP_DATA
2020-07-09 11:54:44 +02:00
Nikita Popov
8318379dd3
Switch back to FREE_UNFETCHED_OP_DATA
...
Some of the code paths leading to this do not fetch op data.
Hopefully this fixes the release build failure.
2020-07-09 11:54:08 +02:00
Nikita Popov
04b17217b4
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Fix bug #79599 in a different way
Revert "Fixed bug #97599 (coredump in set_error_handler)"
2020-07-09 11:18:03 +02:00
Nikita Popov
5795dfda93
Fix bug #79599 in a different way
...
Move the emission of the undefined variable notice before the
array separation.
2020-07-09 11:12:44 +02:00
Nikita Popov
a3cb612243
Revert "Fixed bug #97599 (coredump in set_error_handler)"
...
This reverts commit ccd41e0833 .
This causes a large performance regression when notices are thrown
and large arrays are in scope, see bug #79794 .
2020-07-09 11:12:44 +02:00
Derick Rethans
fc7650944a
Merge branch 'PHP-7.4'
2020-07-09 09:51:15 +01:00
Derick Rethans
972383fda4
Revert "Partial fixed bug #79649 (Altering disable_functions from module init corrupts memory)"
...
This reverts commit a297c09da5 .
2020-07-09 09:50:25 +01:00
George Peter Banyard
7ac9e9bf64
Use ZPP callable check in zend built in functions
2020-07-08 19:38:46 +02:00
Nikita Popov
2af1d36bc5
Skip special function optimization for redeclared disabled functions
...
As pointed out on GH-5817.
2020-07-08 10:11:00 +02:00
Nikita Popov
e45f7053cf
Merge branch 'PHP-7.4'
...
* PHP-7.4:
Fixed bug #79793
2020-07-07 16:33:06 +02:00
Nikita Popov
77acc8a069
Fixed bug #79793
...
Make sure the string key is not released while throwing the
undefined index warning.
2020-07-07 16:29:48 +02:00
Nikita Popov
beb002a867
Fixed bug #79791
...
First throw the undefined variable warning, and then set the
variable to null. Otherwise we're not guaranteed that it's
actually null afterwards.
2020-07-07 16:00:50 +02:00