Skip to content

Commit

Permalink
[TASK] Mitigate PHP 8.4.0-RC1 breaking changes
Browse files Browse the repository at this point in the history
Note that this change addresses three different issues, which
need to be done in one step, otherwise none of isolated patches
would get a +1 CI verification:

* Alignment for changed `$escape` parameter handling of CSV
  related methods, which must be avoided with PHP versions below
  8.4.0-beta5, but is required as of PHP 8.4.0-RC1.
* This `$escape` issue needs to be addressed directly in
  the `typo3/testing-framework` and thus needs a raised
  dependency directly.
* PHP 8.4.0.0-RC1 also deprecated the `E_STRICT` constant,
  which needs to be addressed directly.

With [1] the `$escape` parameter for the following method calls

* `str_getcsv()`
* `fputcsv()`
* `fgetcsv()`

must be provided as a 1 character long value. Omitting and
using the default value will emit a PHP deprecation [2] warning
as of PHP 8.4.0-RC1, for example:

  str_getcsv(): the $escape parameter must be provided
  as its default value will change

To mitigate this, PHP recommends following:

  It must be passed explicitly either positionally or
  via named arguments.

This change adjusts all occurences (function calls) and ensures
that the `$escape` parameter is explicitly provided via
specifying all parameters up to that position and not
using a `named arguments` approach for easier backporting.

The TYPO3 testing framework also needs to be aligned to
mitigate `fgetcsv()` issues, and is raised in the same
step - otherwise none of these changes would get a green
CI pipeline run.

The following testing-framework updates are adjusted:

* main: simple update `main` pointer
* 12.4: Raise to tag `8.2.2`
* 11.5: Raise to tag `6.16.10`

Used command(s):

> composer require --dev "typo3/testing-framework":"^8.2.2"

Additionally, PHP 8.4.0-RC1 deprecated the `E_STRICT`
constant, which now emits a E_DEPRECATED which leads to
failed CI tests. This change introduces a core internal
constant with the same integer value, and replaces usages
with this constant to mitigate the E_DEPRECATION. This constant
can then be dropped with TYPO3 v14, preventing a breaking change
at this time. [3][4]

[1] php/php-src#15569
[2] https://github.com/php/php-src/blob/ebee8df27ed/UPGRADING#L617-L622
[3] https://github.com/php/php-src/blob/ebee8df27edf7/UPGRADING#L47-L49
[4] php/php-src#13053

Resolves: #105155
Releases: main, 12.4, 11.5
Change-Id: Ie8b7d46eeb75ba6e32c0e8f6e7e947775083cc15
Reviewed-on: https://review.typo3.org/c/Packages/TYPO3.CMS/+/86376
Tested-by: core-ci <[email protected]>
Tested-by: Stefan Bürk <[email protected]>
Reviewed-by: Garvin Hicking <[email protected]>
Reviewed-by: Stefan Bürk <[email protected]>
Tested-by: Garvin Hicking <[email protected]>
  • Loading branch information
sbuerk committed Sep 29, 2024
1 parent 260354c commit 2709b3f
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion Classes/ViewHelpers/Format/PhpErrorCodeViewHelper.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,11 @@ final class PhpErrorCodeViewHelper extends AbstractViewHelper
E_USER_ERROR => 'E_USER_ERROR',
E_USER_WARNING => 'E_USER_WARNING',
E_USER_NOTICE => 'E_USER_NOTICE',
E_STRICT => 'E_STRICT',
E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR',
E_DEPRECATED => 'E_DEPRECATED',
E_USER_DEPRECATED => 'E_USER_DEPRECATED',
// @todo Remove intermediate constant E_STRICT_DEPRECATED with TYPO3 v14. E_STRICT (2048) constant deprecated since PHP 8.4.0 RC1.
E_STRICT_DEPRECATED => 'E_STRICT',
];

public function initializeArguments(): void
Expand Down

0 comments on commit 2709b3f

Please sign in to comment.