Commit bb3dad04 authored by Wouter Wolters's avatar Wouter Wolters Committed by Benni Mack
Browse files

[TASK] Deprecate several constants from SystemEnvironmentBuilder

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: default avatarTYPO3com <no-reply@typo3.com>
Reviewed-by: Mathias Brodala's avatarMathias Brodala <mbrodala@pagemachine.de>
Reviewed-by: Christian Kuhn's avatarChristian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn's avatarChristian Kuhn <lolli@schwarzbu.ch>
Reviewed-by: Benni Mack's avatarBenni Mack <benni@typo3.org>
Tested-by: Benni Mack's avatarBenni Mack <benni@typo3.org>
parent c037e1e7
......@@ -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);
}
/**
......
......@@ -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']);
}
......
......@@ -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;
......
......@@ -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
......
......@@ -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;">';
}
......
......@@ -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;
......
......@@ -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:
......
.. 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
......@@ -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"],
];
}
......
......@@ -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']],
......
......@@ -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' => [
......
......@@ -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'],
......
......@@ -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' => [
......
......@@ -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 ']
......
......@@ -81,7 +81,7 @@ class FileHandlingUtilityTest extends UnitTestCase
['../../'],
['/foo/bar'],
['foo//bar'],
['foo/bar' . chr(0)],
['foo/bar' . "\0"],
];
}
......
......@@ -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)) {
......
......@@ -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;
......
......@@ -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(
......
......@@ -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',