1
0
mirror of https://github.com/php/php-src.git synced 2026-04-28 10:43:30 +02:00
Commit Graph

15435 Commits

Author SHA1 Message Date
Nikita Popov 6811222422 Eliminate uses of ZVAL_ZVAL and friends
Instead add RETURN_COPY(_VALUE) macros will the expected behavior.

RETURN_ZVAL doesn't make any sense since PHP 7, but has stuck
around, probably because the alternative was to write directly to
the return_value variable.
2020-01-20 10:34:17 +01:00
Máté Kocsis 99db00b1f2 Fix #78880 Another round 2020-01-19 18:28:43 +01:00
Tyson Andre 3c72105edb Remove leftover ZEND_CAST code for (unset) cast.
Followup for d74d3922ce

Attempting to require a file with (unset) casts results in an E_COMPILE_ERROR
that can't be caught or handled by set_exception_handler/set_error_handler.

Also remove the (bool) cast, because the ZEND_BOOL opcode handles that.

Remove inference that array -> object cast can throw.
It was added in 2a286ad599 - I don't know how creating an stdClass would throw.
(numeric keys, references, etc. don't cause it to throw)

Closes GH-5042
2020-01-18 11:06:19 -05:00
Máté Kocsis d1764ca330 Make error messages more consistent by fixing capitalization
Closes GH-5066 As a first step, let's capitalize their initial letter when it is applicable.
2020-01-17 14:52:46 +01:00
Nikita Popov 9ec1ee5976 Add support for deprecating constants
Internal constants can be marked as CONST_DEPRECATED, in which
case accessing them will throw a deprecation warning.

For now this is only supported on global constants, not class
constants. Complain to me if you need to deprecate a class
constant...

Closes GH-5072.
2020-01-17 10:05:06 +01:00
Nikita Popov bd1977282c Use zend_type inside type lists
Instead of having a completely independent encoding for type list
entries. This is going to use more memory, but I'm not particularly
concerned about that, as type unions that contain multiple classes
should be uncommon. On the other hand, this allows us to treat
top-level types and types inside lists mostly the same.

A new ZEND_TYPE_FOREACH macros allows to transparently treat list
and non-list types the same way. I'm not using it everywhere it could be
used for now, just the places that seemed most obvious.

Of course, this will make any future type system changes much simpler,
as it will not be necessary to duplicate all logic two times.
2020-01-17 09:37:54 +01:00
Christoph M. Becker 1e62e627fd Merge branch 'PHP-7.4'
* PHP-7.4:
  Disable optimizations for ASan instrumented builds
2020-01-16 13:58:28 +01:00
Christoph M. Becker c9908ee5eb Disable optimizations for ASan instrumented builds
ASan instrumentation does not support the MSVC debug runtime, but still
it does not make sense to enable optimizations for such builds, since
they are not meant for production usage anyway, and although memory
corruption issues are still found in optimized builds, the generated
diagnostics are close to being useless, and apparently sometimes even
outright wrong.  Therefore, we disable all optimizations for ASan
instrumented builds.

We also introduce and use `ZEND_WIN32_NEVER_INLINE` for ASan enabled
builds to avoid inlining of functions, so we get even better
diagnostics.
2020-01-16 13:57:21 +01:00
Máté Kocsis 0b4778c377 Fix #78880: Another bunch of spelling errors 2020-01-16 09:46:47 +01:00
Christoph M. Becker 9d7e03c325 Remove useless skip check
As of PHP 5.4.0, `detect_unicode` is always available, so this check
cannot fail.
2020-01-15 18:38:15 +01:00
George Peter Banyard 9118a96fb0 Remove va_copy from zend_portability as it's always available since C99 2020-01-14 22:56:03 +01:00
Dmitry Stogov 77bf144d52 Inline hot parts of bitwise instructions into hybrid VM 2020-01-14 13:47:10 +03:00
Nikita Popov dc02e68f77 Try to fix ZTS build 2020-01-13 13:12:55 +01:00
Nikita Popov d2110e9880 Use helper in one more place 2020-01-13 12:44:16 +01:00
Dmitry Stogov 27815959e1 Improve access to zend_map_ptr data 2020-01-13 14:27:35 +03:00
Nikita Popov 1caf0951a0 Handle one more case I missed 2020-01-13 12:06:23 +01:00
Nikita Popov 5d869df753 Make class name references use the class_name production
Throw a compile error for "static" references instead, where it
isn't already the case.

Also extract the code that does that -- we have quite a few places
where we get a const class ref and require it to be default.
2020-01-13 11:51:09 +01:00
Nikita Popov 2a3e37a496 Don't use yystrlen()
This is unnecessary and not available when GLR is used.
2020-01-13 11:23:30 +01:00
Nikita Popov 7ce531f2c2 Make constant() error handling consistent with plain const lookup
This means we get an Error exception and a much better error
message indicating the root cause (e.g. accessing a private class
constant).
2020-01-10 13:39:56 +01:00
Nikita Popov 0a2f6c5527 Move undefined constant error into get_constant_ex
All the other error conditions are already handled in there, so
this one should be as well.
2020-01-10 11:48:10 +01:00
Nikita Popov d0d1654a34 Fix #49555: Improve "function must be a string" error message
Be more specific for the individual cases and provide relevant
type information.
2020-01-08 14:32:11 +01:00
Nikita Popov 33476ec301 Refer to method rather than function name in error message 2020-01-08 14:26:27 +01:00
Nikita Popov ae5d7604f6 Fix #65274: Add class name to undef class constant error 2020-01-08 14:18:14 +01:00
George Peter Banyard bfe3f934a3 Add warning and convert to exception in string offset assignment:
Convert the empty string assignment to an Error as per RFC [1]
Add a warning that only the first byte will be assigned to the offset if provided
a needle that is longer than one byte.

[1] https://wiki.php.net/rfc/engine_warnings
2020-01-07 21:54:42 +01:00
Nikita Popov 1e4920c119 Renumber zval types, clarify allowed overlap
Make it clear that types used for type declarations can overlap
with the rest, and can also overlap in MAY_BE space.

This makes things more robust against the addition of new primitive
types.
2020-01-07 14:55:52 +01:00
Tyson Andre 37a7046d85 Merge branch 'identical-handler' into HEAD 2020-01-03 19:04:20 -05:00
Máté Kocsis 8f4f1dea34 Convert zend_parse_parameters_none() to fast ZPP
I've done the conversion in those extensions where fast ZPP is predominant.
2020-01-03 13:23:37 +01:00
Nikita Popov 0e6cff70a5 Merge branch 'PHP-7.4'
* PHP-7.4:
  Add test for bug #73816
2020-01-03 11:27:27 +01:00
Nikita Popov 6f63e05320 Add test for bug #73816
This has been fixed by 0f2cdbf214,
add the test case.
2020-01-03 11:26:31 +01:00
Nikita Popov d8c9902567 Implement WeakMap
RFC: https://wiki.php.net/rfc/weak_maps
2020-01-03 10:43:24 +01:00
Máté Kocsis 1b93cfee0c Use RETURN_THROWS() after zend_parse_method_parameters() 2020-01-02 23:01:37 +01:00
Máté Kocsis 349a286461 Use RETURN_THROWS() after zend_throw_error() 2020-01-01 16:42:30 +01:00
Nikita Popov 3262c28d5c Merge branch 'PHP-7.4'
* PHP-7.4:
  Also propagate include exceptions in opcache
  Make url_stats in resolve_path quiet
2019-12-30 23:22:39 +01:00
Nikita Popov 003be875e4 Make url_stats in resolve_path quiet
These stats are used to check whether the file exists -- they
should not generate errors. Having the flag set is particularly
important for custom stream wrappers.
2019-12-30 23:22:26 +01:00
Christoph M. Becker 1ff6911d6a Merge branch 'PHP-7.4'
* PHP-7.4:
  Avoid undefined behavior
2019-12-30 23:18:34 +01:00
Christoph M. Becker 98df5c97f4 Avoid undefined behavior 2019-12-30 23:17:39 +01:00
Nikita Popov d5c886ab7d Merge branch 'PHP-7.4'
* PHP-7.4:
  Properly propagate url_stat exceptions during include
2019-12-30 22:57:07 +01:00
Nikita Popov f77747b06c Properly propagate url_stat exceptions during include
Make sure we abort operations early, and that we don't emit
additional warnings or errors if an exception has been thrown.
2019-12-30 22:56:42 +01:00
Máté Kocsis e1b57310b1 Use RETURN_THROWS() during ZPP in main, sapi, win32, and Zend 2019-12-30 17:38:10 +01:00
Máté Kocsis 31cf9a7ea9 Use RETURN_THROWS() when an exception is thrown
Closes GH-5036
2019-12-30 17:38:10 +01:00
Xinchen Hui 3f3c1ad848 Merge branch 'PHP-7.4'
* PHP-7.4:
  Similar problem (#79022) also exists in Interfaces
  Fixed bug #79022 (class_exists returns True for classes that are not ready to be used)
2019-12-24 14:21:52 +08:00
Xinchen Hui f09b958e90 Similar problem (#79022) also exists in Interfaces 2019-12-24 14:20:55 +08:00
Xinchen Hui 153c9cc346 Fixed bug #79022 (class_exists returns True for classes that are not ready to be used) 2019-12-24 14:04:19 +08:00
Tyson Andre dea62d4b0c Speed up ZEND_IS_IDENTICAL when it can't throw
Add a specialized opcode handler to use for `===`/`!==` when:

1. At least one side is a $cv, and the other is a $cv or CONST
   (avoids the need to free operands)
2. Neither operand can be undefined or a reference
   (avoids the need for error handling and dereferencing)

```
// Elapsed time decreased from 0.275 seconds to 0.243 seconds in combination
// with PR #4982
function count_same(array $values) {
    $same = 0;
    foreach ($values as $x) {
        foreach ($values as $y) {
            if ($y === $x) {
                $same++;
            }
        }
    }
    return $same;
}
$values = range(0, 5000);
$values[] = new stdClass();
$values[] = null;
$values[] = 3;
$start = microtime(true);
$total = count_same($values);
```
2019-12-23 15:42:42 -05:00
Christoph M. Becker dabc28d182 Fix #78880: Spelling error report
We fix the most often occuring typos according to a recent codespell
report[1] in tests, code comments and documentation.

[1] <https://fossies.org/linux/test/php-src-master-f8f48ce.191129.tar.gz/codespell.html>.
2019-12-21 11:58:00 +01:00
Nikita Popov 1d6325fb01 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix leak when generator closed during yield in finally
2019-12-20 17:46:43 +01:00
Nikita Popov b829ea5f74 Fix leak when generator closed during yield in finally
In this case we need to free any pending exceptions or return values
that will be discarded.
2019-12-20 17:46:31 +01:00
Máté Kocsis 0e8070778e Make get_defined_vars() always return an array
GH-5025
2019-12-20 14:31:57 +01:00
Nikita Popov 0d8ebbaa73 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix early free of assign_obj op_data
2019-12-20 10:35:50 +01:00
Nikita Popov 885b3451f4 Fix early free of assign_obj op_data
We need to make sure that op_data is only freed after populating
result, as op_data may be the only thing holding the value in the
case of an overloaded assignment.

This reverts the code to how it looked like in 7.3.
2019-12-20 10:35:34 +01:00