1
0
mirror of https://github.com/php/php-src.git synced 2026-04-24 16:38:25 +02:00
Commit Graph

15340 Commits

Author SHA1 Message Date
Nikita Popov 231bc7c8be Merge branch 'PHP-7.4'
* PHP-7.4:
  Revert "Fixed bug #78903: Conflict in RTD key for closures results in crash"
2019-12-11 14:40:02 +01:00
Nikita Popov 502cd7b1f1 Revert "Fixed bug #78903: Conflict in RTD key for closures results in crash"
This reverts commit b55033fa18.

This breaks ext/opcache/tests/bug65915.phpt.
2019-12-11 14:38:48 +01:00
Nikita Popov 33648585d6 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78903: Conflict in RTD key for closures results in crash
2019-12-11 13:08:12 +01:00
Nikita Popov b55033fa18 Fixed bug #78903: Conflict in RTD key for closures results in crash
I wasn't able to create a simple reproducer for this. General approach
is the same as for anonymous classes: If the key is already used, reuse
the old definition.
2019-12-11 13:07:45 +01:00
Dmitry Stogov ee45dbab37 Merge branch 'PHP-7.4'
* PHP-7.4:
  Addirional fix for bug #78918
2019-12-11 12:29:10 +03:00
Dmitry Stogov 3280209c03 Addirional fix for bug #78918 2019-12-11 12:21:49 +03:00
Dmitry Stogov 8fb3ef6e37 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78937 (Preloading unlinkable anonymous class can segfault)
2019-12-11 00:47:15 +03:00
Dmitry Stogov 20ef51db22 Fixed bug #78937 (Preloading unlinkable anonymous class can segfault) 2019-12-11 00:46:30 +03:00
Nikita Popov 5cdea8d5e8 Merge branch 'PHP-7.4'
* PHP-7.4:
  Add support for class_alias to preloading
  Fixed bug #78935: Check that all linked classes can be preloaded
2019-12-10 13:12:29 +01:00
Nikita Popov 3f86adb0ef Fixed bug #78935: Check that all linked classes can be preloaded
During preloading, check that all classes that have been included
as part of the preload script itself (rather than through opcache_compile_file)
can actually be preloaded, i.e. satisfy Windows restrictions, have
resolved initializers and resolved property types. When resolving
initializers and property types, also autoload additional classes.
Because of this, the resolution runs in a loop.
2019-12-10 13:05:48 +01:00
Nikita Popov aaa0a80636 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix build
2019-12-09 16:06:37 +01:00
Nikita Popov 8d36d79d57 Fix build 2019-12-09 16:06:26 +01:00
Dmitry Stogov b1577f5a57 Merge branch 'PHP-7.4'
* PHP-7.4:
  Export zend_init_func_run_time_cache()
2019-12-09 15:58:19 +03:00
Dmitry Stogov 03d1c788ea Export zend_init_func_run_time_cache() 2019-12-09 15:58:00 +03:00
Dmitry Stogov 62826e95d2 Merge branch 'PHP-7.4'
* PHP-7.4:
  Call zend_unregister_ini_entries() when unload extension loaded through dl() without MSHUTDOWN callback. Extensions with MSHUTDOWN should use UNREGISTER_INI_ENTRIES().
2019-12-09 15:07:39 +03:00
Dmitry Stogov 92c23e1fd3 Call zend_unregister_ini_entries() when unload extension loaded through dl() without MSHUTDOWN callback.
Extensions with MSHUTDOWN should use UNREGISTER_INI_ENTRIES().
2019-12-09 15:05:24 +03:00
Nikita Popov 8b1b68d3ba Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78926: Handle class table reallocation on failed link
2019-12-09 09:16:48 +01:00
Nikita Popov 32c1f37574 Fixed bug #78926: Handle class table reallocation on failed link
When we change back the bucket key on a class linking failure,
make sure to reload the bucket pointer, as the class table may
have been reallocated in the meantime.

Also remove a bogus bucket key change in anon class registration:
We don't actually rename the class in this case anymore, the RTD
key is already the final name.
2019-12-09 09:15:27 +01:00
Nikita Popov 33e39f088a Merge branch 'PHP-7.4'
* PHP-7.4:
  Use unmangled named in property type inheritance error
2019-12-09 08:49:42 +01:00
Nikita Popov 5fcc12f505 Use unmangled named in property type inheritance error 2019-12-09 08:48:33 +01:00
Nikita Popov ded87a9ea0 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78904: Don't call any magic for uninitialized typed properties
2019-12-09 08:42:34 +01:00
Nikita Popov 84354c62b3 Fixed bug #78904: Don't call any magic for uninitialized typed properties
We already changed the behavior for __set() in f1848a4. However, it
seems that this is also a problem for all the other property magic,
see bug #78904.

This commit makes the behavior of all the property magic consistent:
Magic will not be triggered for uninitialized typed properties, only
explicitly unset() ones. This brings behavior more in line how
non-typed properties behave and avoids WTF.

Closes GH-4974.
2019-12-09 08:40:53 +01:00
Christoph M. Becker 4daa680512 Drop duplicate definitions of zend_isnan and friends
Following up on commit 1c4ad17[1], we remove these definitions from
zend_config.w32.h, since they would be overridden by those in
zend_portability.h anyway.

[1] <http://git.php.net/?p=php-src.git;a=commit;h=1c4ad17cc1e483201a36b027f20aab1f91d19628>
2019-12-08 14:55:26 +01:00
Nikita Popov aed2bf7ab3 Remove unused function 2019-12-06 14:18:52 +01:00
Nikita Popov 0bac785477 Optimize return type checking
Split off the fast-path case and avoid redundant checks.
2019-12-06 14:17:03 +01:00
Nikita Popov 9554fb3498 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix constant evaluation of && and ||
2019-12-06 11:11:12 +01:00
Nikita Popov 07fc0764d1 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix constant evaluation of && and ||
2019-12-06 11:10:31 +01:00
Nikita Popov 249e49092d Fix constant evaluation of && and ||
The "return" in the for loop should have been a break on the switch,
otherwise the result is just ignored... but because it prevents
evaluation of the other operand, it also violates the invariant that
everything has been constant evaluated, resulting in an assertion
failure.

The for loop isn't correct in any case though, because it's not legal
to determine the result based on just the second operand, as the
first one may have a side-effect that cannot be optimized away.
2019-12-06 11:07:57 +01:00
George Peter Banyard 1c4ad17cc1 Move isinf, isnan, and isfinite to zend_portability.h
Closes GH-4966
2019-12-05 14:27:51 +01:00
Máté Kocsis 633926021b Remove ezmlm_hash() function 2019-12-05 13:15:54 +01:00
Nikita Popov a603c06e2e Support "string or array" in zpp
This is one of our more common argument unions. Usage is just
prototyped in a few places, certainly not a full conversion.

I'm removing the str_replace.phpt test, because aparently it was
split up into smaller tests at some point, but the original has
not been removed.

Closes GH-4970.
2019-12-05 12:25:57 +01:00
Máté Kocsis ad4d6634f4 Promote warnings to exceptions in settype() function 2019-12-05 08:31:43 +01:00
George Peter Banyard 92d5a2e48c Remove obsolete configure checks for isinf, isnan, and isfinite 2019-12-04 15:17:57 +01:00
George Peter Banyard 039d678fdf Remove now obsolete configure checks for INFINITY and NAN. 2019-12-04 13:50:10 +01:00
George Peter Banyard 67f85573c5 Remove custom implementation for inifinity and NAN as we can now rely on C99
Those ZEND_* constant variant are now identical to their C counterpart, we may considering removing them in the future.
2019-12-04 13:17:20 +01:00
Nikita Popov 7577e79e69 Merge branch 'PHP-7.4'
* PHP-7.4:
  Fix AST printing of nullable builtin types
2019-12-04 11:21:34 +01:00
Nikita Popov 3167e591b5 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fix AST printing of nullable builtin types
2019-12-04 11:21:28 +01:00
Nikita Popov fac43d6515 Fix AST printing of nullable builtin types
Fixes oss-fuzz #19109.
2019-12-04 11:20:52 +01:00
Nikita Popov a6832caac9 Fix incorrect assertion in property type variance check
Only one of the status has to be UNRESOLVED, the other could also
be SUCCESS.

Fixes oss-fuzz #19108 and oss-fuzz #19111.
2019-12-04 11:07:22 +01:00
Nikita Popov a298bde9fb Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78898
2019-12-04 09:41:51 +01:00
Nikita Popov 6540797f1e Fixed bug #78898 2019-12-04 09:40:48 +01:00
Christoph M. Becker 65bbc67063 Next is 7.3.14 2019-12-03 12:04:17 +01:00
Tyson Andre 67adcc5132 Remove no-op check for 'use strict;'
This should be checking for ZEND_SYMBOL_CLASS, not T_CLASS.

This was first added in 37ac1b96ed
2019-11-28 09:16:15 -05:00
Dmitry Stogov 0f2b6ece4e Merge branch 'PHP-7.4'
* PHP-7.4:
  Fixed bug #78868 (Calling __autoload() with incorrect EG(fake_scope) value)
  Consolidate NEWS for 7.4.0 release
  WIP: Merge NEWS
2019-11-25 14:10:53 +03:00
Dmitry Stogov 2ebf530946 Merge branch 'PHP-7.3' into PHP-7.4
* PHP-7.3:
  Fixed bug #78868 (Calling __autoload() with incorrect EG(fake_scope) value)
2019-11-25 14:09:18 +03:00
Dmitry Stogov bb30fe9e2b Fixed bug #78868 (Calling __autoload() with incorrect EG(fake_scope) value) 2019-11-25 14:05:43 +03:00
Tyson Andre b037fe5bd1 Handle reallocated root buffer during GC destroy phase (v2)
We no longer protect GC during the destroy phase, so we need to
deal with buffer reallocation.

Note that the implementation of spl_SplObjectStorage_free_storage
will call the destructor of SplObjectStorage, and free the instance properties,
which I think is what caused the root buffer to be reallocated.
(`current` is a pointer for an index within the root buffer?)

This fixes bug #78811 for me.

Closes GH-4935
2019-11-23 10:45:20 -05:00
Tyson Andre 500ba8b2b8 Handle reallocated root buffer during GC destroy phase (v2)
We no longer protect GC during the destroy phase, so we need to
deal with buffer reallocation.

Note that the implementation of spl_SplObjectStorage_free_storage
will call the destructor of SplObjectStorage, and free the instance properties,
which I think is what caused the root buffer to be reallocated.
(`current` is a pointer for an index within the root buffer?)

This fixes bug #78811 for me.

Closes GH-4935
2019-11-23 10:24:48 -05:00
Máté Kocsis 100552d4b5 Add stubs for PDO 2019-11-18 12:38:10 +01:00
Tyson Andre 7901913b83 Speed up foreach/FE_FREE (optimize for arrays without gc)
In the case where there are still references to an array being iterated
over when the iterator is freed (or the array is not reference counted):

- There's need to save the opline.
- There's no need to check for exceptions.

```
// Before: 0.404 seconds
// After:  0.362 seconds
// loop_iter_empty(1000, 5000);
function loop_iter_empty(int $a, int $b) {
  $values = array_fill(0, $b, []);
  $total = 0;
  for ($i = 0; $i < $b; $i++) {
      foreach ($values as $v) {
          foreach ($v as $x) {
              $total += $x;
          }
      }
  }
  return $total;
}
```
2019-11-18 11:54:35 +03:00