[TASK] Deprecate several constants from SystemEnvironmentBuilder 43/57843/5
authorWouter Wolters <typo3@wouterwolters.nl>
Thu, 9 Aug 2018 14:41:02 +0000 (16:41 +0200)
committerBenni Mack <benni@typo3.org>
Tue, 14 Aug 2018 12:19:00 +0000 (14:19 +0200)
Deprecate 9 URL constants and NUL, TAB and SUB constants.

Resolves: #85793
Releases: master
Change-Id: I01a8fbb7635ffe5db40f2042b77c8dadd6fb8d60
Reviewed-on: https://review.typo3.org/57843
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Brodala <mbrodala@pagemachine.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack <benni@typo3.org>
Tested-by: Benni Mack <benni@typo3.org>
19 files changed:
typo3/sysext/backend/Classes/Form/FormResultCompiler.php
typo3/sysext/backend/Tests/Unit/Form/FormDataProvider/TcaSelectItemsTest.php
typo3/sysext/core/Classes/Configuration/ExtensionConfiguration.php
typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
typo3/sysext/core/Classes/Error/DebugExceptionHandler.php
typo3/sysext/core/Classes/TypoScript/Parser/TypoScriptParser.php
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst [new file with mode: 0644]
typo3/sysext/core/Tests/Unit/DataHandling/DataHandlerTest.php
typo3/sysext/core/Tests/Unit/Http/UploadedFileTest.php
typo3/sysext/core/Tests/Unit/Resource/Driver/LocalDriverTest.php
typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php
typo3/sysext/core/Tests/UnitDeprecated/Encoder/JavaScriptEncoderTest.php
typo3/sysext/extbase/Tests/Unit/Validation/Validator/EmailAddressValidatorTest.php
typo3/sysext/extensionmanager/Tests/Unit/Utility/FileHandlingUtilityTest.php
typo3/sysext/frontend/Classes/ContentObject/ContentObjectRenderer.php
typo3/sysext/frontend/Classes/Page/PageGenerator.php
typo3/sysext/frontend/Tests/Unit/ContentObject/ContentObjectRendererTest.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/ConstantMatcher.php

index eb75894..191ad96 100644 (file)
@@ -295,7 +295,7 @@ class FormResultCompiler
         }
         $out .= LF . implode(LF, $this->additionalJavaScriptPost);
 
-        return $html . LF . TAB . GeneralUtility::wrapJS($out);
+        return $html . LF . "\t" . GeneralUtility::wrapJS($out);
     }
 
     /**
index 9068afb..d4f143f 100644 (file)
@@ -1202,7 +1202,7 @@ class TcaSelectItemsTest extends UnitTestCase
 
         $result = (new TcaSelectItems)->addData($input);
 
-        $result['processedTca']['columns']['aField']['config']['items'][0][2] = str_replace([CR, LF, TAB], '', $result['processedTca']['columns']['aField']['config']['items'][0][2]);
+        $result['processedTca']['columns']['aField']['config']['items'][0][2] = str_replace([CR, LF, "\t"], '', $result['processedTca']['columns']['aField']['config']['items'][0][2]);
         $this->assertSame($expectedItems, $result['processedTca']['columns']['aField']['config']['items']);
     }
 
index 207fc4b..965db6a 100644 (file)
@@ -473,7 +473,7 @@ class ExtensionConfiguration
                 if ($line[0] !== '}' && $line[0] !== '#' && $line[0] !== '/') {
                     // If not brace-end or comment
                     // Find object name string until we meet an operator
-                    $varL = strcspn($line, TAB . ' {=<>(');
+                    $varL = strcspn($line, "\t" . ' {=<>(');
                     // check for special ":=" operator
                     if ($varL > 0 && substr($line, $varL - 1, 2) === ':=') {
                         --$varL;
index b3b15e1..9ed3250 100644 (file)
@@ -112,6 +112,10 @@ class SystemEnvironmentBuilder
         define('TYPO3_URL_GENERAL', 'https://typo3.org/');
         define('TYPO3_URL_LICENSE', 'https://typo3.org/typo3-cms/overview/licenses/');
         define('TYPO3_URL_EXCEPTION', 'https://typo3.org/go/exception/CMS/');
+        define('TYPO3_URL_DONATE', 'https://typo3.org/community/contribute/donate/');
+        define('TYPO3_URL_WIKI_OPCODECACHE', 'https://wiki.typo3.org/Opcode_Cache');
+
+        // @deprecated since TYPO3 v9.4 and will be removed in TYPO3 v10
         define('TYPO3_URL_MAILINGLISTS', 'http://lists.typo3.org/cgi-bin/mailman/listinfo');
         define('TYPO3_URL_DOCUMENTATION', 'https://typo3.org/documentation/');
         define('TYPO3_URL_DOCUMENTATION_TSREF', 'https://docs.typo3.org/typo3cms/TyposcriptReference/');
@@ -121,17 +125,17 @@ class SystemEnvironmentBuilder
         define('TYPO3_URL_SECURITY', 'https://typo3.org/teams/security/');
         define('TYPO3_URL_DOWNLOAD', 'https://typo3.org/download/');
         define('TYPO3_URL_SYSTEMREQUIREMENTS', 'https://typo3.org/typo3-cms/overview/requirements/');
-        define('TYPO3_URL_DONATE', 'https://typo3.org/community/contribute/donate/');
-        define('TYPO3_URL_WIKI_OPCODECACHE', 'https://wiki.typo3.org/Opcode_Cache');
 
-        // A null, a tabulator, a linefeed, a carriage return, a substitution, a CR-LF combination
-        defined('NUL') ?: define('NUL', chr(0));
-        defined('TAB') ?: define('TAB', chr(9));
+        // A linefeed, a carriage return, a CR-LF combination
         defined('LF') ?: define('LF', chr(10));
         defined('CR') ?: define('CR', chr(13));
-        defined('SUB') ?: define('SUB', chr(26));
         defined('CRLF') ?: define('CRLF', CR . LF);
 
+        // @deprecated since TYPO3 v9.4 and will be removed in TYPO3 v10
+        defined('NUL') ?: define('NUL', "\0");
+        defined('TAB') ?: define('TAB', "\t");
+        defined('SUB') ?: define('SUB', chr(26));
+
         // Security related constant: Default value of fileDenyPattern
         define('FILE_DENY_PATTERN_DEFAULT', '\\.(php[3-7]?|phpsh|phtml|pht)(\\..*)?$|^\\.htaccess$');
         // Security related constant: List of file extensions that should be registered as php script file extensions
index 1e74c94..5cccd91 100644 (file)
@@ -183,7 +183,7 @@ class DebugExceptionHandler extends AbstractExceptionHandler
                 if ($endLine > $startLine) {
                     $codeSnippet = '<br /><span style="font-size:10px;">' . htmlspecialchars($filePathAndName) . ':</span><br /><pre>';
                     for ($line = $startLine; $line < $endLine; $line++) {
-                        $codeLine = str_replace(TAB, ' ', $phpFile[$line - 1]);
+                        $codeLine = str_replace("\t", ' ', $phpFile[$line - 1]);
                         if ($line === $lineNumber) {
                             $codeSnippet .= '</pre><pre style="background-color: #F1F1F1; color: black;">';
                         }
index 83d3bcf..c859875 100644 (file)
@@ -373,7 +373,7 @@ class TypoScriptParser
                     if ($line[0] !== '}' && $line[0] !== '#' && $line[0] !== '/') {
                         // If not brace-end or comment
                         // Find object name string until we meet an operator
-                        $varL = strcspn($line, TAB . ' {=<>(');
+                        $varL = strcspn($line, "\t" . ' {=<>(');
                         // check for special ":=" operator
                         if ($varL > 0 && substr($line, $varL - 1, 2) === ':=') {
                             --$varL;
@@ -406,7 +406,7 @@ class TypoScriptParser
                                         $tsFuncArg = $match[2];
                                         $val = $this->getVal($objStrName, $setup);
                                         $currentValue = $val[0] ?? null;
-                                        $tsFuncArg = str_replace(['\\\\', '\\n', '\\t'], ['\\', LF, TAB], $tsFuncArg);
+                                        $tsFuncArg = str_replace(['\\\\', '\\n', '\\t'], ['\\', LF, "\t"], $tsFuncArg);
                                         $newValue = $this->executeValueModifier($tsFunc, $tsFuncArg, $currentValue);
                                         if (isset($newValue)) {
                                             $line = '= ' . $newValue;
index 636e721..b3cc0cc 100644 (file)
@@ -722,10 +722,10 @@ class GeneralUtility
             $ipad = str_repeat(chr(54), $hashBlocksize);
             if (strlen($secret) > $hashBlocksize) {
                 // Keys longer than block size are shorten
-                $key = str_pad(pack('H*', call_user_func($hashAlgorithm, $secret)), $hashBlocksize, chr(0));
+                $key = str_pad(pack('H*', call_user_func($hashAlgorithm, $secret)), $hashBlocksize, "\0");
             } else {
                 // Keys shorter than block size are zero-padded
-                $key = str_pad($secret, $hashBlocksize, chr(0));
+                $key = str_pad($secret, $hashBlocksize, "\0");
             }
             $hmac = call_user_func($hashAlgorithm, ($key ^ $opad) . pack('H*', call_user_func(
                 $hashAlgorithm,
@@ -1370,7 +1370,7 @@ class GeneralUtility
             // re-ident to one tab using the first line as reference
             $match = [];
             if (preg_match('/^(\\t+)/', $string, $match)) {
-                $string = str_replace($match[1], TAB, $string);
+                $string = str_replace($match[1], "\t", $string);
             }
             return '<script type="text/javascript">
 /*<![CDATA[*/
@@ -1475,9 +1475,9 @@ class GeneralUtility
     public static function array2xml(array $array, $NSprefix = '', $level = 0, $docTag = 'phparray', $spaceInd = 0, array $options = [], array $stackData = [])
     {
         // The list of byte values which will trigger binary-safe storage. If any value has one of these char values in it, it will be encoded in base64
-        $binaryChars = chr(0) . chr(1) . chr(2) . chr(3) . chr(4) . chr(5) . chr(6) . chr(7) . chr(8) . chr(11) . chr(12) . chr(14) . chr(15) . chr(16) . chr(17) . chr(18) . chr(19) . chr(20) . chr(21) . chr(22) . chr(23) . chr(24) . chr(25) . chr(26) . chr(27) . chr(28) . chr(29) . chr(30) . chr(31);
+        $binaryChars = "\0" . chr(1) . chr(2) . chr(3) . chr(4) . chr(5) . chr(6) . chr(7) . chr(8) . chr(11) . chr(12) . chr(14) . chr(15) . chr(16) . chr(17) . chr(18) . chr(19) . chr(20) . chr(21) . chr(22) . chr(23) . chr(24) . chr(25) . chr(26) . chr(27) . chr(28) . chr(29) . chr(30) . chr(31);
         // Set indenting mode:
-        $indentChar = $spaceInd ? ' ' : TAB;
+        $indentChar = $spaceInd ? ' ' : "\t";
         $indentN = $spaceInd > 0 ? $spaceInd : 1;
         $nl = $spaceInd >= 0 ? LF : '';
         // Init output variable:
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst
new file mode 100644 (file)
index 0000000..66213d5
--- /dev/null
@@ -0,0 +1,64 @@
+.. include:: ../../Includes.txt
+
+===============================================================================
+Deprecation: #85793 - Deprecate several constants from SystemEnvironmentBuilder
+===============================================================================
+
+See :issue:`85793`
+
+Description
+===========
+
+The following constants have been deprecated and should not be used any longer:
+
+* :php:`NUL`
+  Use :php:`"\0"` instead
+
+* :php:`TAB`
+  Use :php:`"\t"` instead
+
+* :php:`SUB`
+  Use :php:`chr(26)` instead
+
+* :php:`TYPO3_URL_MAILINGLISTS`
+
+* :php:`TYPO3_URL_DOCUMENTATION`
+
+* :php:`TYPO3_URL_DOCUMENTATION_TSREF`
+
+* :php:`TYPO3_URL_DOCUMENTATION_TSCONFIG`
+
+* :php:`TYPO3_URL_CONSULTANCY`
+
+* :php:`TYPO3_URL_CONTRIBUTE`
+
+* :php:`TYPO3_URL_SECURITY`
+
+* :php:`TYPO3_URL_DOWNLOAD`
+
+* :php:`TYPO3_URL_SYSTEMREQUIREMENTS`
+
+
+Impact
+======
+
+The above constants are still defined in TYPO3 v9, but their definition will be
+dropped in v10.
+
+
+Affected Installations
+======================
+
+Constants can not be deprecated as such and using them does not log a deprecation message.
+Extensions in v9 should not use them any longer but switch to the alternatives already.
+
+The extension scanner will find usages of the above constants and marks them as strong
+matches.
+
+
+Migration
+=========
+
+Use one of the :php:`chr(*)` variants or replace the constant usage with the URL in your own code.
+
+.. index:: PHP-API, FullyScanned
index f781b8b..ed4e018 100644 (file)
@@ -1024,8 +1024,8 @@ class DataHandlerTest extends UnitTestCase
             'with space after' => ['Test (copy 42) ', 'Test (copy 42) '],
             'with double spaces after' => ['Test (copy 42)  ', 'Test (copy 42)  '],
             'with three spaces after' => ['Test (copy 42)   ', 'Test (copy 42)   '],
-            'with double tab before' => ['Test' . chr(9) . '(copy 42)', 'Test'],
-            'with double tab after' => ['Test (copy 42)' . chr(9), 'Test (copy 42)' . chr(9)],
+            'with double tab before' => ['Test' . "\t" . '(copy 42)', 'Test'],
+            'with double tab after' => ['Test (copy 42)' . "\t", 'Test (copy 42)' . "\t"],
         ];
     }
 
index dd9cf6c..6796c3e 100644 (file)
@@ -53,7 +53,7 @@ class UploadedFileTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
             'float'  => [1.1],
             /* Have not figured out a valid way to test an invalid path yet; null byte injection
              * appears to get caught by fopen()
-            'invalid-path' => [ ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) ? '[:]' : 'foo' . chr(0) ],
+            'invalid-path' => [ ('WIN' === strtoupper(substr(PHP_OS, 0, 3))) ? '[:]' : 'foo' . "\0" ],
              */
             'array'  => [['filename']],
             'object' => [(object)['filename']],
index 4764e64..3aff051 100644 (file)
@@ -270,7 +270,7 @@ class LocalDriverTest extends BaseTestCase
     {
         return [
             'folder name with NULL character' => [
-                'some' . chr(0) . 'Folder',
+                'some' . "\0" . 'Folder',
                 'some_Folder'
             ],
             'folder name with directory part' => [
index 93cd726..9bea3c8 100644 (file)
@@ -995,7 +995,7 @@ class GeneralUtilityTest extends UnitTestCase
             'trailing carriage return' => ['test@example.com' . CR],
             'trailing linefeed' => ['test@example.com' . LF],
             'trailing carriage return linefeed' => ['test@example.com' . CRLF],
-            'trailing tab' => ['test@example.com' . TAB],
+            'trailing tab' => ['test@example.com' . "\t"],
             'prohibited input characters' => ['“mailto:test@example.com”'],
         ];
     }
@@ -2359,11 +2359,11 @@ class GeneralUtilityTest extends UnitTestCase
                 'Hello\\u0020World\\u0021'
             ],
             'Whitespaces are properly encoded' => [
-                TAB . LF . CR . ' ',
+                "\t" . LF . CR . ' ',
                 '\\u0009\\u000A\\u000D\\u0020'
             ],
             'Null byte is properly encoded' => [
-                chr(0),
+                "\0",
                 '\\u0000'
             ],
             'Umlauts are properly encoded' => [
@@ -4035,7 +4035,7 @@ class GeneralUtilityTest extends UnitTestCase
             'backslash in path' => ['path\\path'],
             'directory up in path' => ['path/../path'],
             'directory up at the beginning' => ['../path'],
-            'NUL character in path' => ['path' . chr(0) . 'path'],
+            'NUL character in path' => ['path' . "\0" . 'path'],
             'BS character in path' => ['path' . chr(8) . 'path'],
             'invalid UTF-8-sequence' => ["\xc0" . 'path/path'],
             'Could be overlong NUL in some UTF-8 implementations, invalid in RFC3629' => ["\xc0\x80" . 'path/path'],
@@ -4098,8 +4098,8 @@ class GeneralUtilityTest extends UnitTestCase
     public function deniedFilesDataProvider()
     {
         return [
-            'Nul character in file' => ['image' . chr(0) . '.gif'],
-            'Nul character in file with .php' => ['image.php' . chr(0) . '.gif'],
+            'Nul character in file' => ['image' . "\0" . '.gif'],
+            'Nul character in file with .php' => ['image.php' . "\0" . '.gif'],
             'Regular .php file' => ['file.php'],
             'Regular .php5 file' => ['file.php5'],
             'Regular .php3 file' => ['file.php3'],
index 1b11db2..8b30754 100644 (file)
@@ -60,11 +60,11 @@ class JavaScriptEncoderTest extends UnitTestCase
                 'Hello\\x20World\\x21'
             ],
             'Whitespaces are properly encoded' => [
-                TAB . LF . CR . ' ',
+                "\t" . LF . CR . ' ',
                 '\\x09\\x0A\\x0D\\x20'
             ],
             'Null byte is properly encoded' => [
-                chr(0),
+                "\0",
                 '\\x00'
             ],
             'Umlauts are properly encoded' => [
index ebe5979..be8cf4e 100644 (file)
@@ -69,7 +69,7 @@ class EmailAddressValidatorTest extends \TYPO3\TestingFramework\Core\Unit\UnitTe
             ['someone@typo3.'],
             ['local@192.168.2'],
             ['local@192.168.270.1'],
-            ['foo@bar.com' . chr(0)],
+            ['foo@bar.com' . "\0"],
             ['foo@bar.org' . chr(10)],
             ['andreas@foerthner@example.com'],
             ['some@one.net ']
index 79ff414..5976d2a 100644 (file)
@@ -81,7 +81,7 @@ class FileHandlingUtilityTest extends UnitTestCase
             ['../../'],
             ['/foo/bar'],
             ['foo//bar'],
-            ['foo/bar' . chr(0)],
+            ['foo/bar' . "\0"],
         ];
     }
 
index fba7790..eeb1dc1 100644 (file)
@@ -3254,10 +3254,10 @@ class ContentObjectRenderer implements LoggerAwareInterface
         $indent = (int)$parts[0];
         $comment = htmlspecialchars($this->insertData($parts[1]));
         $output = LF
-            . str_pad('', $indent, TAB) . '<!-- ' . $comment . ' [begin] -->' . LF
-            . str_pad('', $indent + 1, TAB) . $content . LF
-            . str_pad('', $indent, TAB) . '<!-- ' . $comment . ' [end] -->' . LF
-            . str_pad('', $indent + 1, TAB);
+            . str_pad('', $indent, "\t") . '<!-- ' . $comment . ' [begin] -->' . LF
+            . str_pad('', $indent + 1, "\t") . $content . LF
+            . str_pad('', $indent, "\t") . '<!-- ' . $comment . ' [end] -->' . LF
+            . str_pad('', $indent + 1, "\t");
         return $output;
     }
 
@@ -4406,7 +4406,7 @@ class ContentObjectRenderer implements LoggerAwareInterface
             $pieces = count($textpieces);
             $textstr = $textpieces[0];
             for ($i = 1; $i < $pieces; $i++) {
-                $len = strcspn($textpieces[$i], chr(32) . TAB . CRLF);
+                $len = strcspn($textpieces[$i], chr(32) . "\t" . CRLF);
                 if (trim(substr($textstr, -1)) === '' && $len) {
                     $lastChar = substr($textpieces[$i], $len - 1, 1);
                     if (!preg_match('/[A-Za-z0-9\\/#_-]/', $lastChar)) {
@@ -4482,7 +4482,7 @@ class ContentObjectRenderer implements LoggerAwareInterface
         $textstr = $textpieces[0];
         $tsfe = $this->getTypoScriptFrontendController();
         for ($i = 1; $i < $pieces; $i++) {
-            $len = strcspn($textpieces[$i], chr(32) . TAB . CRLF);
+            $len = strcspn($textpieces[$i], chr(32) . "\t" . CRLF);
             if (trim(substr($textstr, -1)) === '' && $len) {
                 $lastChar = substr($textpieces[$i], $len - 1, 1);
                 if (!preg_match('/[A-Za-z0-9]/', $lastChar)) {
index ac802fd..ce6875f 100644 (file)
@@ -103,7 +103,7 @@ class PageGenerator
         }
         $headerComment = $tsfe->config['config']['headerComment'];
         if (trim($headerComment)) {
-            $pageRenderer->addInlineComment(TAB . str_replace(LF, LF . TAB, trim($headerComment)) . LF);
+            $pageRenderer->addInlineComment("\t" . str_replace(LF, LF . "\t", trim($headerComment)) . LF);
         }
         // Setting charset:
         $theCharset = $tsfe->metaCharset;
index ee0e70e..c55832d 100644 (file)
@@ -4959,7 +4959,7 @@ class ContentObjectRendererTest extends UnitTestCase
             ],
             'no config: double break with whitespace' => [
                 'onetwo',
-                'one' . LF . TAB . ' ' . TAB . ' ' . LF . 'two',
+                'one' . LF . "\t" . ' ' . "\t" . ' ' . LF . 'two',
                 [],
             ],
             'no config: single break around' => [
@@ -5577,9 +5577,9 @@ class ContentObjectRendererTest extends UnitTestCase
             'null' => null,
             'false' => false,
             'empty' => '',
-            'whitespace' => TAB . ' ',
+            'whitespace' => "\t" . ' ',
             'stringZero' => '0',
-            'stringZeroWithWhiteSpace' => TAB . ' 0 ' . TAB,
+            'stringZeroWithWhiteSpace' => "\t" . ' 0 ' . "\t",
             'zero' => 0,
             'string' => 'string',
             'true' => true,
@@ -5887,7 +5887,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'null is blank' => [$alt, null, $conf],
             'false is blank' => [$alt, false, $conf],
             'empty string is blank' => [$alt, '', $conf],
-            'whitespace is blank' => [$alt, TAB . '', $conf],
+            'whitespace is blank' => [$alt, "\t" . '', $conf],
             // non-blank cases
             'string is not blank' => ['string', 'string', $conf],
             'zero is not blank' => [0, 0, $conf],
@@ -5934,12 +5934,12 @@ class ContentObjectRendererTest extends UnitTestCase
             'false is empty' => [$alt, false, $conf],
             'zero is empty' => [$alt, 0, $conf],
             'float zero is empty' => [$alt, 0.0, $conf],
-            'whitespace is empty' => [$alt, TAB . ' ', $conf],
+            'whitespace is empty' => [$alt, "\t" . ' ', $conf],
             'empty string is empty' => [$alt, '', $conf],
             'zero string is empty' => [$alt, '0', $conf],
             'zero string is empty with whitespace' => [
                 $alt,
-                TAB . ' 0 ' . TAB,
+                "\t" . ' 0 ' . "\t",
                 $conf
             ],
             // non-empty cases
@@ -5990,7 +5990,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'zero is not null' => [0, 0, $conf],
             'zero string is not null' => ['0', '0', $conf],
             'empty string is not null' => ['', '', $conf],
-            'whitespace is not null' => [TAB . '', TAB . '', $conf],
+            'whitespace is not null' => ["\t" . '', "\t" . '', $conf],
         ];
     }
 
@@ -6041,7 +6041,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrap>XXX</wrap>',
                 'XXX',
-                ['innerWrap' => '<wrap>' . TAB . ' | ' . TAB . '</wrap>'],
+                ['innerWrap' => '<wrap>' . "\t" . ' | ' . "\t" . '</wrap>'],
             ],
             'split char change is not possible' => [
                 '<wrap> # </wrap>XXX',
@@ -6097,7 +6097,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrap>XXX</wrap>',
                 'XXX',
-                ['innerWrap2' => '<wrap>' . TAB . ' | ' . TAB . '</wrap>'],
+                ['innerWrap2' => '<wrap>' . "\t" . ' | ' . "\t" . '</wrap>'],
             ],
             'split char change is not possible' => [
                 '<wrap> # </wrap>XXX',
@@ -6431,11 +6431,11 @@ class ContentObjectRendererTest extends UnitTestCase
                 ],
             ],
             'Tabs as whitespace' => [
-                TAB . 'left' . TAB . 'middle' . TAB . 'right' . TAB,
+                "\t" . 'left' . "\t" . 'middle' . "\t" . 'right' . "\t",
                 'middle',
                 [
                     'noTrimWrap' =>
-                        '|' . TAB . 'left' . TAB . '|' . TAB . 'right' . TAB . '|',
+                        '|' . "\t" . 'left' . "\t" . '|' . "\t" . 'right' . "\t" . '|',
                 ],
             ],
             'Split char is 0' => [
@@ -6587,7 +6587,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrap>XXX</wrap>',
                 'XXX',
-                ['outerWrap' => '<wrap>' . TAB . ' | ' . TAB . '</wrap>'],
+                ['outerWrap' => '<wrap>' . "\t" . ' | ' . "\t" . '</wrap>'],
             ],
             'split char change is not possible' => [
                 '<wrap> # </wrap>XXX',
@@ -6643,7 +6643,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'whitespace does not override' => [
                 'content',
                 'content',
-                ['override' => ' ' . TAB]
+                ['override' => ' ' . "\t"]
             ],
             'zero does not override' => [
                 'content',
@@ -6681,9 +6681,9 @@ class ContentObjectRendererTest extends UnitTestCase
                 ['override' => true]
             ],
             'the value is not trimmed' => [
-                TAB . 'override',
+                "\t" . 'override',
                 'content',
-                ['override' => TAB . 'override']
+                ['override' => "\t" . 'override']
             ],
         ];
     }
@@ -7195,7 +7195,7 @@ class ContentObjectRendererTest extends UnitTestCase
 
             // non-empty content
             'blank is not empty' => [' ', false, ' '],
-            'tab is not empty' => [TAB, false, TAB],
+            'tab is not empty' => ["\t", false, "\t"],
             'linebreak is not empty' => [PHP_EOL, false, PHP_EOL],
             '"0" is not empty' => ['0', false, '0'],
             '0 is not empty' => [0, false, 0],
@@ -7754,8 +7754,8 @@ class ContentObjectRendererTest extends UnitTestCase
             'empty string' => ['', ''],
             'string without whitespace' => ['xxx', 'xxx'],
             'string with whitespace inside' => [
-                'xx ' . TAB . ' xx',
-                'xx ' . TAB . ' xx',
+                'xx ' . "\t" . ' xx',
+                'xx ' . "\t" . ' xx',
             ],
             'string with newlines inside' => [
                 'xx ' . PHP_EOL . ' xx',
@@ -7763,9 +7763,9 @@ class ContentObjectRendererTest extends UnitTestCase
             ],
             // string trimmed
             'blanks around' => ['xxx', '  xxx  '],
-            'tabs around' => ['xxx', TAB . 'xxx' . TAB],
+            'tabs around' => ['xxx', "\t" . 'xxx' . "\t"],
             'newlines around' => ['xxx', PHP_EOL . 'xxx' . PHP_EOL],
-            'mixed case' => ['xxx', TAB . ' xxx ' . PHP_EOL],
+            'mixed case' => ['xxx', "\t" . ' xxx ' . PHP_EOL],
             // non strings
             'null' => ['', null],
             'false' => ['', false],
@@ -7856,7 +7856,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrapper>XXX</wrapper>',
                 'XXX',
-                ['wrap' => '<wrapper>' . TAB . ' | ' . TAB . '</wrapper>'],
+                ['wrap' => '<wrapper>' . "\t" . ' | ' . "\t" . '</wrapper>'],
             ],
             'missing pipe puts wrap before' => [
                 '<pre>XXX',
@@ -7922,7 +7922,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrapper>XXX</wrapper>',
                 'XXX',
-                ['wrap2' => '<wrapper>' . TAB . ' | ' . TAB . '</wrapper>'],
+                ['wrap2' => '<wrapper>' . "\t" . ' | ' . "\t" . '</wrapper>'],
             ],
             'missing pipe puts wrap2 before' => [
                 '<pre>XXX',
@@ -7985,7 +7985,7 @@ class ContentObjectRendererTest extends UnitTestCase
             'trims whitespace' => [
                 '<wrapper>XXX</wrapper>',
                 'XXX',
-                ['wrap3' => '<wrapper>' . TAB . ' | ' . TAB . '</wrapper>'],
+                ['wrap3' => '<wrapper>' . "\t" . ' | ' . "\t" . '</wrapper>'],
             ],
             'missing pipe puts wrap3 before' => [
                 '<pre>XXX',
@@ -8178,9 +8178,9 @@ class ContentObjectRendererTest extends UnitTestCase
         $format .= '%%s%s%%s%s';
         $format .= '%%s<!-- %%s [end] -->%s';
         $format .= '%%s%s';
-        $format = sprintf($format, LF, LF, TAB, LF, LF, TAB);
-        $indent1 = TAB;
-        $indent2 = TAB . TAB;
+        $format = sprintf($format, LF, LF, "\t", LF, LF, "\t");
+        $indent1 = "\t";
+        $indent2 = "\t" . "\t";
         return [
             'indent one tab' => [
                 sprintf(
index ec4f4a4..400a105 100644 (file)
@@ -89,4 +89,64 @@ return [
             'Deprecation-85285-DeprecatedSystemConstants.rst',
         ],
     ],
+    'NUL' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TAB' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'SUB' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_SYSTEMREQUIREMENTS' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_DOWNLOAD' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_SECURITY' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_CONTRIBUTE' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_CONSULTANCY' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_DOCUMENTATION_TSCONFIG' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_DOCUMENTATION_TSREF' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_DOCUMENTATION' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
+    'TYPO3_URL_MAILINGLISTS' => [
+        'restFiles' => [
+            'Deprecation-85793-DeprecateSeveralConstantsFromSystemEnvironmentBuilder.rst',
+        ]
+    ],
 ];