[!!!][TASK] Remove deprecated methods in GeneralUtility 80/52480/4
authorBenni Mack <benni@typo3.org>
Tue, 18 Apr 2017 14:27:11 +0000 (16:27 +0200)
committerChristian Kuhn <lolli@schwarzbu.ch>
Tue, 18 Apr 2017 20:23:35 +0000 (22:23 +0200)
Drop methods and change method signatures of methods
within GeneralUtility.

Resolves: #80703
Releases: master
Change-Id: I7c617d7dbf0a7f877f6ae248319f4d28eb1f725c
Reviewed-on: https://review.typo3.org/52480
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Christian Kuhn <lolli@schwarzbu.ch>
Tested-by: Christian Kuhn <lolli@schwarzbu.ch>
typo3/sysext/backend/Classes/Form/Container/FlexFormNoTabsContainer.php
typo3/sysext/core/Classes/Utility/GeneralUtility.php
typo3/sysext/core/Documentation/Changelog/master/Breaking-80700-DeprecatedFunctionalityRemoved.rst
typo3/sysext/core/Resources/PHP/RemoveXSS.php [deleted file]
typo3/sysext/core/Tests/Legacy/typo3/contrib/class.removexssTest.php [deleted file]
typo3/sysext/core/Tests/Unit/Utility/Fixtures/GeneralUtilityMinifyJavaScriptFixture.php [deleted file]
typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php

index bdaabe7..d4170f8 100644 (file)
@@ -45,7 +45,6 @@ class FlexFormNoTabsContainer extends AbstractContainer
         $sheetName = array_pop($flexFormSheetNames);
         $flexFormRowDataSubPart = $flexFormRowData['data'][$sheetName]['lDEF'] ?: [];
 
-        // That was taken from GeneralUtility::resolveSheetDefInDS - no idea if it is important
         unset($flexFormDataStructureArray['meta']);
 
         if (!is_array($flexFormDataStructureArray['sheets'][$sheetName]['ROOT']['el'])) {
index 437300e..f338ff4 100644 (file)
@@ -18,7 +18,6 @@ use GuzzleHttp\Exception\RequestException;
 use TYPO3\CMS\Core\Charset\CharsetConverter;
 use TYPO3\CMS\Core\Core\ApplicationContext;
 use TYPO3\CMS\Core\Core\ClassLoadingInformation;
-use TYPO3\CMS\Core\Crypto\Random;
 use TYPO3\CMS\Core\Database\ConnectionPool;
 use TYPO3\CMS\Core\Http\RequestFactory;
 use TYPO3\CMS\Core\Service\OpcodeCacheService;
@@ -242,28 +241,6 @@ class GeneralUtility
         }
     }
 
-    /**
-     * Wrapper for the RemoveXSS function.
-     * Removes potential XSS code from an input string.
-     *
-     * Using an external class by Travis Puderbaugh <kallahar@quickwired.com>
-     *
-     * @param string $string Input string
-     * @return string Input string with potential XSS code removed
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function removeXSS($string)
-    {
-        static::logDeprecatedFunction();
-        return \RemoveXSS::process($string);
-    }
-
-    /*************************
-     *
-     * IMAGE FUNCTIONS
-     *
-     *************************/
-
     /*************************
      *
      * STRING FUNCTIONS
@@ -692,21 +669,6 @@ class GeneralUtility
     }
 
     /**
-     * Returns TRUE if the current TYPO3 version (or compatibility version) is compatible to the input version
-     * Notice that this function compares branches, not versions (4.0.1 would be > 4.0.0 although they use the same compat_version)
-     *
-     * @param string $verNumberStr Minimum branch number required (format x.y / e.g. "4.0" NOT "4.0.0"!)
-     * @return bool Returns TRUE if this setup is compatible with the provided version number
-     * @todo Still needs a function to convert versions to branches
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function compat_version($verNumberStr)
-    {
-        static::logDeprecatedFunction();
-        return VersionNumberUtility::convertVersionNumberToInteger(TYPO3_branch) >= VersionNumberUtility::convertVersionNumberToInteger($verNumberStr);
-    }
-
-    /**
      * Makes a positive integer hash out of the first 7 chars from the md5 hash of the input
      *
      * @param string $str String to md5-hash
@@ -893,20 +855,6 @@ class GeneralUtility
     }
 
     /**
-     * Returns microtime input to milliseconds
-     *
-     * @param string $microtime Microtime
-     * @return int Microtime input string converted to an integer (milliseconds)
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function convertMicrotime($microtime)
-    {
-        static::logDeprecatedFunction();
-        $parts = explode(' ', $microtime);
-        return round(($parts[0] + $parts[1]) * 1000);
-    }
-
-    /**
      * This splits a string by the chars in $operators (typical /+-*) and returns an array with them in
      *
      * @param string $string Input string, eg "123 + 456 / 789 - 4
@@ -930,67 +878,6 @@ class GeneralUtility
     }
 
     /**
-     * Re-converts HTML entities if they have been converted by htmlspecialchars()
-     * Note: Use htmlspecialchars($str, ENT_COMPAT, 'UTF-8', FALSE) to avoid double encoding.
-     *       This makes the call to this method obsolete.
-     *
-     * @param string $str String which contains eg. "&amp;amp;" which should stay "&amp;". Or "&amp;#1234;" to "&#1234;". Or "&amp;#x1b;" to "&#x1b;
-     * @return string Converted result.
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function deHSCentities($str)
-    {
-        static::logDeprecatedFunction();
-        return preg_replace('/&amp;([#[:alnum:]]*;)/', '&\\1', $str);
-    }
-
-    /**
-     * This function is used to escape any ' -characters when transferring text to JavaScript!
-     *
-     * @param string $string String to escape
-     * @param bool $extended If set, also backslashes are escaped.
-     * @param string $char The character to escape, default is ' (single-quote)
-     * @return string Processed input string
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function slashJS($string, $extended = false, $char = '\'')
-    {
-        static::logDeprecatedFunction();
-        if ($extended) {
-            $string = str_replace('\\', '\\\\', $string);
-        }
-        return str_replace($char, '\\' . $char, $string);
-    }
-
-    /**
-     * Version of rawurlencode() where all spaces (%20) are re-converted to space-characters.
-     * Useful when passing text to JavaScript where you simply url-encode it to get around problems with syntax-errors, linebreaks etc.
-     *
-     * @param string $str String to raw-url-encode with spaces preserved
-     * @return string Rawurlencoded result of input string, but with all %20 (space chars) converted to real spaces.
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, implement directly via PHP instead
-     */
-    public static function rawUrlEncodeJS($str)
-    {
-        static::logDeprecatedFunction();
-        return str_replace('%20', ' ', rawurlencode($str));
-    }
-
-    /**
-     * rawurlencode which preserves "/" chars
-     * Useful when file paths should keep the "/" chars, but have all other special chars encoded.
-     *
-     * @param string $str Input string
-     * @return string Output string
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, use the PHP methods directly instead
-     */
-    public static function rawUrlEncodeFP($str)
-    {
-        static::logDeprecatedFunction();
-        return str_replace('%2F', '/', rawurlencode($str));
-    }
-
-    /**
      * Checking syntax of input email address
      *
      * http://tools.ietf.org/html/rfc3696
@@ -1028,51 +915,6 @@ class GeneralUtility
     }
 
     /**
-     * Converts string to uppercase
-     * The function converts all Latin characters (a-z, but no accents, etc) to
-     * uppercase. It is safe for all supported character sets (incl. utf-8).
-     * Unlike strtoupper() it does not honour the locale.
-     *
-     * @param string $str Input string
-     * @return string Uppercase String
-     * @deprecated since TYPO3 CMS v8, this method will be removed in TYPO3 CMS v9, use mb_strtoupper() instead
-     */
-    public static function strtoupper($str)
-    {
-        self::logDeprecatedFunction();
-        return strtr((string)$str, 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ');
-    }
-
-    /**
-     * Converts string to lowercase
-     * The function converts all Latin characters (A-Z, but no accents, etc) to
-     * lowercase. It is safe for all supported character sets (incl. utf-8).
-     * Unlike strtolower() it does not honour the locale.
-     *
-     * @param string $str Input string
-     * @return string Lowercase String
-     * @deprecated since TYPO3 CMS v8, this method will be removed in TYPO3 CMS v9, use mb_strtolower() instead
-     */
-    public static function strtolower($str)
-    {
-        self::logDeprecatedFunction();
-        return strtr((string)$str, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz');
-    }
-
-    /**
-     * Returns a string of highly randomized bytes (over the full 8-bit range).
-     *
-     * @param int $bytesToReturn Number of bytes to return
-     * @return string Random Bytes
-     * @deprecated since TYPO3 CMS 8, this method will be removed in TYPO3 CMS 9. Use \TYPO3\CMS\Core\Crypto\Random->generateRandomBytes() instead
-     */
-    public static function generateRandomBytes($bytesToReturn)
-    {
-        self::logDeprecatedFunction();
-        return self::makeInstance(Random::class)->generateRandomBytes($bytesToReturn);
-    }
-
-    /**
      * Returns an ASCII string (punicode) representation of $value
      *
      * @param string $value
@@ -1092,19 +934,6 @@ class GeneralUtility
     }
 
     /**
-     * Returns a hex representation of a random byte string.
-     *
-     * @param int $count Number of hex characters to return
-     * @return string Random Bytes
-     * @deprecated since TYPO3 CMS 8, this method will be removed in TYPO3 CMS 9. Use \TYPO3\CMS\Core\Crypto\Random::generateRandomHexString() instead
-     */
-    public static function getRandomHexString($count)
-    {
-        self::logDeprecatedFunction();
-        return self::makeInstance(Random::class)->generateRandomHexString($count);
-    }
-
-    /**
      * Returns a given string with underscores as UpperCamelCase.
      * Example: Converts blog_example to BlogExample
      *
@@ -1142,20 +971,6 @@ class GeneralUtility
     }
 
     /**
-     * Converts the first char of a string to lowercase if it is a latin character (A-Z).
-     * Example: Converts "Hello World" to "hello World"
-     *
-     * @param string $string The string to be used to lowercase the first character
-     * @return string The string with the first character as lowercase
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function lcfirst($string)
-    {
-        static::logDeprecatedFunction();
-        return lcfirst($string);
-    }
-
-    /**
      * Checks if a given string is a Uniform Resource Locator (URL).
      *
      * On seriously malformed URLs, parse_url may return FALSE and emit an
@@ -1384,21 +1199,6 @@ class GeneralUtility
     }
 
     /**
-     * Takes a row and returns a CSV string of the values with $delim (default is ,) and $quote (default is ") as separator chars.
-     *
-     * @param array $row Input array of values
-     * @param string $delim Delimited, default is comma
-     * @param string $quote Quote-character to wrap around the values.
-     * @return string A single line of CSV
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9.
-     */
-    public static function csvValues(array $row, $delim = ',', $quote = '"')
-    {
-        self::logDeprecatedFunction();
-        return CsvUtility::csvValues($row, $delim, $quote);
-    }
-
-    /**
      * Removes dots "." from end of a key identifier of TypoScript styled array.
      * array('key.' => array('property.' => 'value')) --> array('key' => array('property' => 'value'))
      *
@@ -1530,15 +1330,10 @@ class GeneralUtility
      * This is nice for indenting JS code with PHP code on the same level.
      *
      * @param string $string JavaScript code
-     * @param null $_ unused, will be removed in TYPO3 CMS 9
      * @return string The wrapped JS code, ready to put into a XHTML page
      */
-    public static function wrapJS($string, $_ = null)
+    public static function wrapJS($string)
     {
-        if ($_ !== null) {
-            self::deprecationLog('Parameter 2 of GeneralUtility::wrapJS is obsolete and can be omitted.');
-        }
-
         if (trim($string)) {
             // remove nl from the beginning
             $string = ltrim($string, LF);
@@ -1628,26 +1423,6 @@ class GeneralUtility
     }
 
     /**
-     * Turns PHP array into XML. See array2xml()
-     *
-     * @param array $array The input PHP array with any kind of data; text, binary, integers. Not objects though.
-     * @param string $docTag Alternative document tag. Default is "phparray".
-     * @param array $options Options for the compilation. See array2xml() for description.
-     * @param string $charset Forced charset to prologue
-     * @return string An XML string made from the input content in the array.
-     * @see xml2array(),array2xml()
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9.
-     */
-    public static function array2xml_cs(array $array, $docTag = 'phparray', array $options = [], $charset = '')
-    {
-        static::logDeprecatedFunction();
-        // Set default charset unless explicitly specified
-        $charset = $charset ?: 'utf-8';
-        // Return XML:
-        return '<?xml version="1.0" encoding="' . htmlspecialchars($charset) . '" standalone="yes" ?>' . LF . self::array2xml($array, '', 0, $docTag, 0, $options);
-    }
-
-    /**
      * Converts a PHP array into an XML string.
      * The XML output is optimized for readability since associative keys are used as tag names.
      * This also means that only alphanumeric characters are allowed in the tag names AND only keys NOT starting with numbers (so watch your usage of keys!). However there are options you can set to avoid this problem.
@@ -1956,22 +1731,6 @@ class GeneralUtility
     }
 
     /**
-     * Extracts the attributes (typically encoding and version) of an XML prologue (header).
-     *
-     * @param string $xmlData XML data
-     * @return array Attributes of the xml prologue (header)
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9.
-     */
-    public static function xmlGetHeaderAttribs($xmlData)
-    {
-        self::logDeprecatedFunction();
-        $match = [];
-        if (preg_match('/^\\s*<\\?xml([^>]*)\\?\\>/', $xmlData, $match)) {
-            return self::get_tag_attributes($match[1]);
-        }
-    }
-
-    /**
      * Minifies JavaScript
      *
      * @param string $script Script to minify
@@ -2641,18 +2400,6 @@ class GeneralUtility
     }
 
     /**
-     * Retrieves the maximum path length that is valid in the current environment.
-     *
-     * @return int The maximum available path length
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function getMaximumPathLength()
-    {
-        static::logDeprecatedFunction();
-        return PHP_MAXPATHLEN;
-    }
-
-    /**
      * Function for static version numbers on files, based on the filemtime
      *
      * This will make the filename automatically change when a file is
@@ -3261,22 +3008,13 @@ class GeneralUtility
      * \TYPO3\CMS\Core\Utility\GeneralUtility::validPathStr().
      *
      * @param string $filename The input filename/filepath to evaluate
-     * @param bool $_ - obsolete, will be removed in TYPO3 CMS 9
-     * @param bool $_2 - obsolete, will be removed in TYPO3 CMS 9
      * @return string Returns the absolute filename of $filename if valid, otherwise blank string.
      */
-    public static function getFileAbsFileName($filename, $_ = null, $_2 = null)
+    public static function getFileAbsFileName($filename)
     {
         if ((string)$filename === '') {
             return '';
         }
-        if ($_ !== null) {
-            self::deprecationLog('Parameter 2 of GeneralUtility::getFileAbsFileName is obsolete and can be omitted.');
-        }
-        if ($_2 !== null) {
-            self::deprecationLog('Parameter 3 of GeneralUtility::getFileAbsFileName is obsolete and can be omitted.');
-        }
-
         // Extension
         if (strpos($filename, 'EXT:') === 0) {
             list($extKey, $local) = explode('/', substr($filename, 4), 2);
@@ -3626,77 +3364,10 @@ class GeneralUtility
     }
 
     /**
-     * Looks for a sheet-definition in the input data structure array. If found it will return the data structure for the sheet given as $sheet (if found).
-     * If the sheet definition is in an external file that file is parsed and the data structure inside of that is returned.
-     *
-     * @param array $dataStructArray Input data structure, possibly with a sheet-definition and references to external data source files.
-     * @param string $sheet The sheet to return, preferably.
-     * @return array An array with two num. keys: key0: The data structure is returned in this key (array) UNLESS an error occurred in which case an error string is returned (string). key1: The used sheet key value!
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9. This is now integrated in FlexFormTools->parseDataStructureByIdentifier()
-     */
-    public static function resolveSheetDefInDS($dataStructArray, $sheet = 'sDEF')
-    {
-        self::logDeprecatedFunction();
-        if (!is_array($dataStructArray)) {
-            return 'Data structure must be an array';
-        }
-        if (is_array($dataStructArray['sheets'])) {
-            $singleSheet = false;
-            if (!isset($dataStructArray['sheets'][$sheet])) {
-                $sheet = 'sDEF';
-            }
-            $dataStruct = $dataStructArray['sheets'][$sheet];
-            // If not an array, but still set, then regard it as a relative reference to a file:
-            if ($dataStruct && !is_array($dataStruct)) {
-                $file = self::getFileAbsFileName($dataStruct);
-                if ($file && @is_file($file)) {
-                    $dataStruct = self::xml2array(file_get_contents($file));
-                }
-            }
-        } else {
-            $singleSheet = true;
-            $dataStruct = $dataStructArray;
-            if (isset($dataStruct['meta'])) {
-                unset($dataStruct['meta']);
-            }
-            // Meta data should not appear there.
-            // Default sheet
-            $sheet = 'sDEF';
-        }
-        return [$dataStruct, $sheet, $singleSheet];
-    }
-
-    /**
-     * Resolves ALL sheet definitions in dataStructArray
-     * If no sheet is found, then the default "sDEF" will be created with the dataStructure inside.
-     *
-     * @param array $dataStructArray Input data structure, possibly with a sheet-definition and references to external data source files.
-     * @return array Output data structure with all sheets resolved as arrays.
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9. This is now integrated in FlexFormTools->parseDataStructureByIdentifier()
-     */
-    public static function resolveAllSheetsInDS(array $dataStructArray)
-    {
-        self::logDeprecatedFunction();
-        if (is_array($dataStructArray['sheets'])) {
-            $out = ['sheets' => []];
-            foreach ($dataStructArray['sheets'] as $sheetId => $sDat) {
-                list($ds, $aS) = self::resolveSheetDefInDS($dataStructArray, $sheetId);
-                if ($sheetId == $aS) {
-                    $out['sheets'][$aS] = $ds;
-                }
-            }
-        } else {
-            list($ds) = self::resolveSheetDefInDS($dataStructArray);
-            $out = ['sheets' => ['sDEF' => $ds]];
-        }
-        return $out;
-    }
-
-    /**
      * Calls a user-defined function/method in class
      * Such a function/method should look like this: "function proc(&$params, &$ref) {...}"
      *
-     * @param string $funcName Function/Method reference or Closure, '[file-reference":"]["&"]class/function["->"method-name]'. You can prefix this reference with "[file-reference]:" and \TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName() will then be used to resolve the filename and subsequently include it by "require_once()" which means you don't have to worry about including the class file either! Example: "EXT:realurl/class.tx_realurl.php:&tx_realurl->encodeSpURL". However, using file references has been marked as deprecated and should be avoided, instead use the autoloading mechanism in place directly. Finally; you can prefix the class name with "&" if you want to reuse a former instance of the same object call ("singleton").
+     * @param string $funcName Function/Method reference or Closure.
      * @param mixed $params Parameters to be pass along (typically an array) (REFERENCE!)
      * @param mixed $ref Reference to be passed along (typically "$this" - being a reference to the calling object) (REFERENCE!)
      * @param string $_ Not used anymore since 6.0
@@ -3712,63 +3383,15 @@ class GeneralUtility
             return call_user_func_array($funcName, [&$params, &$ref]);
         }
         $funcName = trim($funcName);
-        // Check persistent object and if found, call directly and exit.
-        if (isset($GLOBALS['T3_VAR']['callUserFunction'][$funcName]) && is_array($GLOBALS['T3_VAR']['callUserFunction'][$funcName])) {
-            return call_user_func_array([
-                &$GLOBALS['T3_VAR']['callUserFunction'][$funcName]['obj'],
-                $GLOBALS['T3_VAR']['callUserFunction'][$funcName]['method']
-            ], [&$params, &$ref]);
-        }
-        // Check file-reference prefix; if found, require_once() the file (should be library of code)
-        if (strpos($funcName, ':') !== false) {
-            // @deprecated since TYPO3 v8, will be removed in v9
-            self::deprecationLog('Using file references to resolve "' . $funcName . '" has been deprecated in TYPO3 v8 '
-                . 'when calling GeneralUtility::callUserFunction(), make sure the class is available via the class loader. '
-                . 'This functionality will be removed in TYPO3 v9.');
-            list($file, $funcRef) = self::revExplode(':', $funcName, 2);
-            $requireFile = self::getFileAbsFileName($file);
-            if ($requireFile) {
-                require_once $requireFile;
-            }
-        } else {
-            $funcRef = $funcName;
-        }
-        // Check for persistent object token, "&"
-        if ($funcRef[0] === '&') {
-            self::deprecationLog('Using the persistent object token "&" when resolving "' . $funcRef . '"  for '
-                . 'GeneralUtility::callUserFunc() is deprecated since TYPO3 v8. Make sure to implement '
-                . 'SingletonInterface to achieve the same functionality. This functionality will be removed in TYPO3 v9 '
-                . 'and will then result in a fatal PHP error.');
-            $funcRef = substr($funcRef, 1);
-            $storePersistentObject = true;
-        } else {
-            $storePersistentObject = false;
-        }
-        // Call function or method:
-        $parts = explode('->', $funcRef);
+        $parts = explode('->', $funcName);
+        // Call function or method
         if (count($parts) === 2) {
             // Class
             // Check if class/method exists:
             if (class_exists($parts[0])) {
-                // Get/Create object of class:
-                if ($storePersistentObject) {
-                    // Get reference to current instance of class:
-                    if (!is_object($GLOBALS['T3_VAR']['callUserFunction_classPool'][$parts[0]])) {
-                        $GLOBALS['T3_VAR']['callUserFunction_classPool'][$parts[0]] = self::makeInstance($parts[0]);
-                    }
-                    $classObj = $GLOBALS['T3_VAR']['callUserFunction_classPool'][$parts[0]];
-                } else {
-                    // Create new object:
-                    $classObj = self::makeInstance($parts[0]);
-                }
+                // Create object
+                $classObj = self::makeInstance($parts[0]);
                 if (method_exists($classObj, $parts[1])) {
-                    // If persistent object should be created, set reference:
-                    if ($storePersistentObject) {
-                        $GLOBALS['T3_VAR']['callUserFunction'][$funcName] = [
-                            'method' => $parts[1],
-                            'obj' => &$classObj
-                        ];
-                    }
                     // Call method:
                     $content = call_user_func_array([&$classObj, $parts[1]], [&$params, &$ref]);
                 } else {
@@ -3789,10 +3412,10 @@ class GeneralUtility
             }
         } else {
             // Function
-            if (function_exists($funcRef)) {
-                $content = call_user_func_array($funcRef, [&$params, &$ref]);
+            if (function_exists($funcName)) {
+                $content = call_user_func_array($funcName, [&$params, &$ref]);
             } else {
-                $errorMsg = 'No function named: ' . $funcRef;
+                $errorMsg = 'No function named: ' . $funcName;
                 if ($errorMode == 2) {
                     throw new \InvalidArgumentException($errorMsg, 1294585867);
                 } elseif (!$errorMode) {
@@ -3810,34 +3433,15 @@ class GeneralUtility
      * Creates and returns reference to a user defined object.
      * This function can return an object reference if you like.
      *
-     * @param string $classRef Class reference, '[file-reference":"]class-name'.
-     *                         You can prefix the class name with "[file-reference]:" and
-     *                         GeneralUtility::getFileAbsFileName() will then be used to resolve the filename and
-     *                         subsequently include it by "require_once()" which means you don't have to worry about
-     *                         including the class file either! Example: "EXT:realurl/class.tx_realurl.php:tx_realurl".
-     *                         However, the file reference part is marked as deprecated as the class loading mechanism
-     *                         via composer or the autoloading part of TYPO3 should be used instead.
+     * @param string $className Class name
      * @return object The instance of the class asked for. Instance is created with GeneralUtility::makeInstance
      * @see callUserFunction()
      */
-    public static function getUserObj($classRef)
+    public static function getUserObj($className)
     {
-        // Check file-reference prefix; if found, require_once() the file (should be library of code)
-        if (strpos($classRef, ':') !== false) {
-            // @deprecated since TYPO3 v8, will be removed in v9
-            self::deprecationLog('Using file references to resolve "' . $classRef . '" has been deprecated in TYPO3 v8 '
-                . 'when calling GeneralUtility::getUserObj(), make sure the class is available via the class loader. '
-                . 'This functionality will be removed in TYPO3 v9.');
-            list($file, $classRef) = self::revExplode(':', $classRef, 2);
-            $requireFile = self::getFileAbsFileName($file);
-            if ($requireFile) {
-                require_once $requireFile;
-            }
-        }
-
         // Check if class exists:
-        if (class_exists($classRef)) {
-            return self::makeInstance($classRef);
+        if (class_exists($className)) {
+            return self::makeInstance($className);
         }
     }
 
@@ -4159,37 +3763,6 @@ class GeneralUtility
     }
 
     /**
-     * Require a class for TYPO3
-     * Useful to require classes from inside other classes (not global scope). A limited set of global variables are available (see function)
-     *
-     * @param string $requireFile: Path of the file to be included
-     * @deprecated since TYPO3 CMS 8, this method will be removed in TYPO3 CMS 9
-     */
-    public static function requireOnce($requireFile)
-    {
-        self::logDeprecatedFunction();
-        // Needed for require_once
-        global $T3_SERVICES, $T3_VAR, $TYPO3_CONF_VARS;
-        require_once $requireFile;
-    }
-
-    /**
-     * Requires a class for TYPO3
-     * Useful to require classes from inside other classes (not global scope).
-     * A limited set of global variables are available (see function)
-     *
-     * @param string $requireFile: Path of the file to be included
-     * @deprecated since TYPO3 CMS 8, this method will be removed in TYPO3 CMS 9
-     */
-    public static function requireFile($requireFile)
-    {
-        self::logDeprecatedFunction();
-        // Needed for require
-        global $T3_SERVICES, $T3_VAR, $TYPO3_CONF_VARS;
-        require $requireFile;
-    }
-
-    /**
      * Create a shortened "redirect" URL with specified length from an incoming URL
      *
      * @param string $inUrl Input URL
@@ -4224,22 +3797,6 @@ class GeneralUtility
     }
 
     /**
-     * Function to compensate for DPI resolution.
-     *
-     * @param float $fontSize font size for freetype function call
-     *
-     * @return float compensated font size based on 96 dpi
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9, the functionality is now moved to GraphicalFunctions->compensateFontSizeiBasedOnFreetypeDpi()
-     */
-    public static function freetypeDpiComp($fontSize)
-    {
-        self::logDeprecatedFunction();
-        // FreeType 2 always has 96 dpi.
-        $dpi = 96.0;
-        return $fontSize / $dpi * 72;
-    }
-
-    /**
      * Initialize the system log.
      *
      * @see sysLog()
@@ -4507,25 +4064,8 @@ class GeneralUtility
     }
 
     /**
-     * Compile the command for running ImageMagick/GraphicsMagick.
-     *
-     * @param string $command Command to be run: identify, convert or combine/composite
-     * @param string $parameters The parameters string
-     * @param string $path Override the default path (e.g. used by the install tool)
-     * @return string Compiled command that deals with ImageMagick & GraphicsMagick
-     * @deprecated since TYPO3 CMS 8, will be removed in TYPO3 CMS 9. - use CommandUtility directly
-     */
-    public static function imageMagickCommand($command, $parameters, $path = '')
-    {
-        self::logDeprecatedFunction();
-        return CommandUtility::imageMagickCommand($command, $parameters, $path);
-    }
-
-    /**
      * Explode a string (normally a list of filenames) with whitespaces by considering quotes in that string.
      *
-     * This is mostly needed by the imageMagickCommand function above.
-     *
      * @param string $parameters The whole parameters string
      * @param bool $unQuote If set, the elements of the resulting array are unquoted.
      * @return array Exploded parameters
@@ -4583,34 +4123,6 @@ class GeneralUtility
     }
 
     /**
-     * Ends and flushes all output buffers
-     *
-     * @deprecated since TYPO3 CMS 8, will be removed in TYPO3 CMS 9.
-     */
-    public static function flushOutputBuffers()
-    {
-        self::logDeprecatedFunction();
-        $obContent = '';
-        while ($content = ob_get_clean()) {
-            $obContent .= $content;
-        }
-        // If previously a "Content-Encoding: whatever" has been set, we have to unset it
-        if (!headers_sent()) {
-            $headersList = headers_list();
-            foreach ($headersList as $header) {
-                // Split it up at the :
-                list($key, $value) = self::trimExplode(':', $header, true);
-                // Check if we have a Content-Encoding other than 'None'
-                if (strtolower($key) === 'content-encoding' && strtolower($value) !== 'none') {
-                    header('Content-Encoding: None');
-                    break;
-                }
-            }
-        }
-        echo $obContent;
-    }
-
-    /**
      * Set the ApplicationContext
      *
      * This function is used by the Bootstrap to hand over the application context. It must not be used anywhere else,
index ad03997..8ca4f32 100644 (file)
@@ -10,16 +10,47 @@ Description
 ===========
 
 The following PHP classes that have been previously deprecated for v8 have been removed:
-
+* RemoveXSS
 * TYPO3\CMS\Backend\Console\Application
 * TYPO3\CMS\Backend\Console\CliRequestHandler
 * TYPO3\CMS\Core\Controller\CommandLineController
 * TYPO3\CMS\Lowlevel\CleanerCommand
 
+The following PHP class methods that have been previously deprecated for v8 have been removed:
+* TYPO3\CMS\Core\Utility\GeneralUtility::array2xml_cs()
+* TYPO3\CMS\Core\Utility\GeneralUtility::compat_version()
+* TYPO3\CMS\Core\Utility\GeneralUtility::convertMicrotime()
+* TYPO3\CMS\Core\Utility\GeneralUtility::csvValues()
+* TYPO3\CMS\Core\Utility\GeneralUtility::deHSCentities()
+* TYPO3\CMS\Core\Utility\GeneralUtility::flushOutputBuffers()
+* TYPO3\CMS\Core\Utility\GeneralUtility::freetypeDpiComp()
+* TYPO3\CMS\Core\Utility\GeneralUtility::generateRandomBytes()
+* TYPO3\CMS\Core\Utility\GeneralUtility::getMaximumPathLength()
+* TYPO3\CMS\Core\Utility\GeneralUtility::getRandomHexString()
+* TYPO3\CMS\Core\Utility\GeneralUtility::imageMagickCommand()
+* TYPO3\CMS\Core\Utility\GeneralUtility::lcfirst()
+* TYPO3\CMS\Core\Utility\GeneralUtility::rawUrlEncodeFP()
+* TYPO3\CMS\Core\Utility\GeneralUtility::rawUrlEncodeJS()
+* TYPO3\CMS\Core\Utility\GeneralUtility::removeXSS()
+* TYPO3\CMS\Core\Utility\GeneralUtility::requireFile()
+* TYPO3\CMS\Core\Utility\GeneralUtility::requireOnce()
+* TYPO3\CMS\Core\Utility\GeneralUtility::resolveAllSheetsInDS()
+* TYPO3\CMS\Core\Utility\GeneralUtility::resolveSheetDefInDS()
+* TYPO3\CMS\Core\Utility\GeneralUtility::slashJS()
+* TYPO3\CMS\Core\Utility\GeneralUtility::strtolower()
+* TYPO3\CMS\Core\Utility\GeneralUtility::strtoupper()
+* TYPO3\CMS\Core\Utility\GeneralUtility::xmlGetHeaderAttribs()
+
+The following methods changed signature according to previous deprecations in v8:
+* TYPO3\CMS\Core\Utility\GeneralUtility::callUserFunction() - Persistent or file prefix in first argument removed
+* TYPO3\CMS\Core\Utility\GeneralUtility::getFileAbsFileName() - Second and thrird argument dropped
+* TYPO3\CMS\Core\Utility\GeneralUtility::getUserObj() - File reference prefix in first argument removed
+* TYPO3\CMS\Core\Utility\GeneralUtility::wrapJS() - Second argument dropped
+
 The following configuration options are not evaluated anymore:
 * $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['GLOBAL']['cliKeys']
 
-The following entrypoints have been removed
+The following entry points have been removed:
 * typo3/cli_dispatch.phpsh
 
 
@@ -28,6 +59,6 @@ Impact
 
 Instantiating or requiring the PHP classes, will result in PHP fatal errors.
 
-Calling the entrypoints via CLI will result in a file not found error.
+Calling the entry points via CLI will result in a file not found error.
 
 .. index:: PHP-API
\ No newline at end of file
diff --git a/typo3/sysext/core/Resources/PHP/RemoveXSS.php b/typo3/sysext/core/Resources/PHP/RemoveXSS.php
deleted file mode 100644 (file)
index 8f998ef..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
-<?php
-/**
- * Usage: Run *every* variable passed in through it.
- * The goal of this function is to be a generic function that can be used to
- * parse almost any input and render it XSS safe. For more information on
- * actual XSS attacks, check out http://ha.ckers.org/xss.html. Another
- * excellent site is the XSS Database which details each attack and how it
- * works.
- *
- * Used with permission by the author.
- * URL: http://quickwired.com/smallprojects/php_xss_filter_function.php
- *
- * Check XSS attacks on http://ha.ckers.org/xss.html
- *
- * License:
- * This code is public domain, you are free to do whatever you want with it,
- * including adding it to your own project which can be under any license.
- */
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Class RemoveXSS
- *
- * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
- */
-class RemoveXSS
-{
-    /**
-     * Removes potential XSS code from an input string.
-     *
-     * Using an external class by Travis Puderbaugh <kallahar@quickwired.com>
-     *
-     * @param string $value Input string
-     * @param string $replaceString replaceString for inserting in keywords (which destroys the tags)
-     * @return string Input string with potential XSS code removed
-     * @deprecated since TYPO3 v8, will be removed in TYPO3 v9
-     */
-    public static function process($value, $replaceString = '<x>')
-    {
-        GeneralUtility::logDeprecatedFunction();
-        // Don't use empty $replaceString because then no XSS-remove will be done
-        if ($replaceString == '') {
-            $replaceString = '<x>';
-        }
-        // Remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed.
-        // This prevents some character re-spacing such as <java\0script>
-        // Note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
-        $value = preg_replace('/([\x00-\x08]|[\x0b-\x0c]|[\x0e-\x19])/', '', $value);
-
-        // Straight replacements, the user should never need these since they're normal characters.
-        // This prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A&#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
-        $searchHexEncodings = '/&#[xX]0{0,8}(21|22|23|24|25|26|27|28|29|2a|2b|2d|2f|30|31|32|33|34|35|36|37|38|39|3a|3b|3d|3f|40|41|42|43|44|45|46|47|48|49|4a|4b|4c|4d|4e|4f|50|51|52|53|54|55|56|57|58|59|5a|5b|5c|5d|5e|5f|60|61|62|63|64|65|66|67|68|69|6a|6b|6c|6d|6e|6f|70|71|72|73|74|75|76|77|78|79|7a|7b|7c|7d|7e);?/i';
-        $searchUnicodeEncodings = '/&#0{0,8}(33|34|35|36|37|38|39|40|41|42|43|45|47|48|49|50|51|52|53|54|55|56|57|58|59|61|63|64|65|66|67|68|69|70|71|72|73|74|75|76|77|78|79|80|81|82|83|84|85|86|87|88|89|90|91|92|93|94|95|96|97|98|99|100|101|102|103|104|105|106|107|108|109|110|111|112|113|114|115|116|117|118|119|120|121|122|123|124|125|126);?/i';
-        while (preg_match($searchHexEncodings, $value) || preg_match($searchUnicodeEncodings, $value)) {
-            $value = preg_replace_callback(
-                $searchHexEncodings,
-                function ($matches) {
-                    return chr(hexdec($matches[1]));
-                },
-                $value
-            );
-            $value = preg_replace_callback(
-                $searchUnicodeEncodings,
-                function ($matches) {
-                    return chr($matches[1]);
-                },
-                $value
-            );
-        }
-
-        // Now the only remaining whitespace attacks are \t, \n, and \r
-        $allKeywords = ['javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed',
-            'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base', 'video', 'audio', 'track',
-            'canvas', 'onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut',
-            'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate',
-            'onblur', 'onbounce', 'oncanplay', 'oncanplaythrough', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu',
-            'oncontrolselect', 'oncopy', 'oncuechange', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete',
-            'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart',
-            'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish',
-            'onfocus', 'onfocusin', 'onfocusout', 'onhashchange', 'onhelp', 'oninput', 'oninvalid', 'onkeydown', 'onkeypress',
-            'onkeyup', 'onlayoutcomplete', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart', 'onlosecapture',
-            'onmessage', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup',
-            'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onoffline', 'ononline', 'onpagehide', 'onpageshow', 'onpaste',
-            'onpause', 'onplay', 'onplaying', 'onpopstate', 'onprogress', 'onpropertychange', 'onratechange', 'onreadystatechange',
-            'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted',
-            'onscroll', 'onseeked', 'onseeking', 'onselect', 'onselectionchange', 'onselectstart', 'onshow', 'onstalled', 'onstart',
-            'onstop', 'onstorage', 'onsubmit', 'onsuspend', 'ontimeupdate', 'onunload', 'onvolumechange', 'onwaiting'];
-        $tagKeywords = ['applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame',
-            'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base', 'video', 'audio', 'track', 'canvas'];
-        $attributeKeywords = ['style', 'onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate',
-            'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint',
-            'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncanplay', 'oncanplaythrough', 'oncellchange', 'onchange',
-            'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncuechange', 'oncut', 'ondataavailable', 'ondatasetchanged',
-            'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover',
-            'ondragstart', 'ondrop', 'ondurationchange', 'onemptied', 'onended', 'onerror', 'onerrorupdate', 'onfilterchange',
-            'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhashchange', 'onhelp', 'oninput', 'oninvalid,', 'onkeydown',
-            'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onloadeddata', 'onloadedmetadata', 'onloadstart',
-            'onlosecapture', 'onmessage', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout',
-            'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onoffline', 'ononline',
-            'onpagehide', 'onpageshow', 'onpaste', 'onpause', 'onplay', 'onplaying', 'onpopstate', 'onprogress',
-            'onpropertychange', 'onratechange', 'onreadystatechange', 'onredo', 'onreset', 'onresize', 'onresizeend',
-            'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onseeked', 'onseeking',
-            'onselect', 'onselectionchange', 'onselectstart', 'onshow', 'onstalled', 'onstart', 'onstop', 'onstorage', 'onsubmit',
-            'onsuspend', 'ontimeupdate', 'onundo', 'onunload', 'onvolumechange', 'onwaiting'];
-        $protocolKeywords = ['javascript', 'vbscript', 'expression'];
-
-        // Remove the potential &#xxx; stuff for testing
-        $valueForQuickCheck = preg_replace('/(&#[xX]?0{0,8}(9|10|13|a|b);?)*\s*/i', '', $value);
-        $potentialKeywords = [];
-
-        foreach ($allKeywords as $keyword) {
-            // Stripos is faster than the regular expressions used later and because the words we're looking for only have
-            // chars < 0x80 we can use the non-multibyte safe version.
-            if (stripos($valueForQuickCheck, $keyword) !== false) {
-                //keep list of potential words that were found
-                if (in_array($keyword, $protocolKeywords, true)) {
-                    $potentialKeywords[] = [$keyword, 'protocol'];
-                }
-                if (in_array($keyword, $tagKeywords, true)) {
-                    $potentialKeywords[] = [$keyword, 'tag'];
-                }
-                if (in_array($keyword, $attributeKeywords, true)) {
-                    $potentialKeywords[] = [$keyword, 'attribute'];
-                }
-                // Some keywords appear in more than one array.
-                // These get multiple entries in $potentialKeywords, each with the appropriate type
-            }
-        }
-        // Only process potential words
-        if (!empty($potentialKeywords)) {
-            // Keep replacing as long as the previous round replaced something
-            $found = true;
-            while ($found) {
-                $valueBeforeReplacement = $value;
-                foreach ($potentialKeywords as $potentialKeywordItem) {
-                    list($keyword, $type) = $potentialKeywordItem;
-                    $keywordLength = strlen($keyword);
-                    // Build pattern with each letter of the keyword and potential (encoded) whitespace in between
-                    $pattern = $keyword[0];
-                    if ($keywordLength > 1) {
-                        for ($j = 1; $j < $keywordLength; $j++) {
-                            $pattern .= '((&#[xX]0{0,8}([9ab]);?)|(&#0{0,8}(9|10|13);?)|\s)*' . $keyword[$j];
-                        }
-                    }
-                    // Handle each type a little different (extra conditions to prevent false positives a bit better)
-                    switch ($type) {
-                        case 'protocol':
-                            // These take the form of e.g. 'javascript:'
-                            $pattern .= '((&#[xX]0{0,8}([9ab]);?)|(&#0{0,8}(9|10|13);?)|\s)*(?=:)';
-                            break;
-                        case 'tag':
-                            // These take the form of e.g. '<SCRIPT[^\da-z] ....';
-                            $pattern = '(?<=<)' . $pattern . '((&#[xX]0{0,8}([9ab]);?)|(&#0{0,8}(9|10|13);?)|\s)*(?=[^\da-z])';
-                            break;
-                        case 'attribute':
-                            // These take the form of e.g. 'onload='  Beware that a lot of characters are allowed
-                            // between the attribute and the equal sign!
-                            $pattern .= '[\s\!\#\$\%\&\(\)\*\~\+\-\_\.\,\:\;\?\@\[\/\|\\\\\]\^\`]*(?==)';
-                            break;
-                    }
-                    $pattern = '/' . $pattern . '/i';
-                    // Inject the replacement to render the potential problem harmless
-                    $replacement = substr_replace($keyword, $replaceString, 2, 0);
-                    // Perform the actual replacement
-                    $value = preg_replace($pattern, $replacement, $value);
-                    // If no replacements were made exit the loop
-                    $found = ($valueBeforeReplacement !== $value);
-                }
-            }
-        }
-        return $value;
-    }
-}
diff --git a/typo3/sysext/core/Tests/Legacy/typo3/contrib/class.removexssTest.php b/typo3/sysext/core/Tests/Legacy/typo3/contrib/class.removexssTest.php
deleted file mode 100644 (file)
index 634f777..0000000
+++ /dev/null
@@ -1,470 +0,0 @@
-<?php
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-/**
- * Testcase for class RemoveXSS
- * @ see http://ha.ckers.org/xss.html
- * @ examples from http://ha.ckers.org/xssAttacks.xml
- */
-class RemoveXSSTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
-{
-    /**
-     * @test
-     */
-    public function checkAttackScriptAlert()
-    {
-        $testString = "<SCRIPT>alert('XSS')</SCRIPT>";
-        $expectedString = "<sc<x>ript>alert('XSS')</SCRIPT>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackScriptSrcJs()
-    {
-        $testString = '<SCRIPT SRC=http://ha.ckers.org/xss.js></SCRIPT>';
-        $expectedString = '<sc<x>ript SRC=http://ha.ckers.org/xss.js></SCRIPT>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackScriptAlertFromCharCode()
-    {
-        $testString = '<SCRIPT>alert(String.fromCharCode(88,83,83))</SCRIPT>';
-        $expectedString = '<sc<x>ript>alert(String.fromCharCode(88,83,83))</SCRIPT>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackBaseHref()
-    {
-        $testString = "<BASE HREF=\"javascript:alert('XSS');//\">";
-        $expectedString = "<ba<x>se HREF=\"ja<x>vascript:alert('XSS');//\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackBgsound()
-    {
-        $testString = "<BGSOUND SRC=\"javascript:alert('XSS');\">";
-        $expectedString = "<bg<x>sound SRC=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackBodyBackground()
-    {
-        $testString = "<BODY BACKGROUND=\"javascript:alert('XSS');\">";
-        $expectedString = "<BODY BACKGROUND=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackBodyOnLoad()
-    {
-        $testString = "<BODY ONLOAD=alert('XSS')>";
-        $expectedString = "<BODY on<x>load=alert('XSS')>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyleUrl()
-    {
-        $testString = "<DIV STYLE=\"background-image: url(javascript:alert('XSS'))\">";
-        $expectedString = "<DIV st<x>yle=\"background-image: url(ja<x>vascript:alert('XSS'))\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyleWidth()
-    {
-        $testString = "<DIV STYLE=\"width: expression(alert('XSS'));\">";
-        $expectedString = "<DIV st<x>yle=\"width: expression(alert('XSS'));\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackFrameset()
-    {
-        $testString = "<FRAMESET><FRAME SRC=\"javascript:alert('XSS');\"></FRAMESET>";
-        $expectedString = "<fr<x>ameset><fr<x>ame SRC=\"ja<x>vascript:alert('XSS');\"></FRAMESET>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackIframe()
-    {
-        $testString = "<IFRAME SRC=\"javascript:alert('XSS');\"></IFRAME>";
-        $expectedString = "<if<x>rame SRC=\"ja<x>vascript:alert('XSS');\"></IFRAME>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackInputImage()
-    {
-        $testString = "<INPUT TYPE=\"IMAGE\" SRC=\"javascript:alert('XSS');\">";
-        $expectedString = "<INPUT TYPE=\"IMAGE\" SRC=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageSrc()
-    {
-        $testString = "<IMG SRC=\"javascript:alert('XSS');\">";
-        $expectedString = "<IMG SRC=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageSrcNoQuotesNoSemicolon()
-    {
-        $testString = "<IMG SRC=javascript:alert('XSS')>";
-        $expectedString = "<IMG SRC=ja<x>vascript:alert('XSS')>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageDynsrc()
-    {
-        $testString = "<IMG DYNSRC=\"javascript:alert('XSS');\">";
-        $expectedString = "<IMG DYNSRC=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageLowsrc()
-    {
-        $testString = "<IMG LOWSRC=\"javascript:alert('XSS');\">";
-        $expectedString = "<IMG LOWSRC=\"ja<x>vascript:alert('XSS');\">";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyle()
-    {
-        $testString = "<STYLE>li {list-style-image: url(\"javascript:alert('XSS')\");}</STYLE>";
-        $expectedString = "<st<x>yle>li {list-style-image: url(\"ja<x>vascript:alert('XSS')\");}</STYLE>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageVbscript()
-    {
-        $testString = "<IMG SRC='vbscript:msgbox(\"XSS\")'>";
-        $expectedString = "<IMG SRC='vb<x>script:msgbox(\"XSS\")'>";
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackLayer()
-    {
-        $testString = '<LAYER SRC="http://ha.ckers.org/scriptlet.html"></LAYER>';
-        $expectedString = '<la<x>yer SRC="http://ha.ckers.org/scriptlet.html"></LAYER>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackMeta()
-    {
-        $testString = '<META HTTP-EQUIV="refresh" CONTENT="0;url=javascript:alert(\'XSS\');">';
-        $expectedString = '<me<x>ta HTTP-EQUIV="refresh" CONTENT="0;url=ja<x>vascript:alert(\'XSS\');">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackMetaWithUrl()
-    {
-        $testString = '<META HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">';
-        $expectedString = '<me<x>ta HTTP-EQUIV="refresh" CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4K">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackMetaWithUrlExtended()
-    {
-        $testString = '<META HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=javascript:alert(\'XSS\');">';
-        $expectedString = '<me<x>ta HTTP-EQUIV="refresh" CONTENT="0; URL=http://;URL=ja<x>vascript:alert(\'XSS\');">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackObject()
-    {
-        $testString = '<OBJECT TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/scriptlet.html"></OBJECT>';
-        $expectedString = '<ob<x>ject TYPE="text/x-scriptlet" DATA="http://ha.ckers.org/scriptlet.html"></OBJECT>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackObjectEmbeddedXss()
-    {
-        $testString = '<OBJECT classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=javascript:alert(\'XSS\')></OBJECT>';
-        $expectedString = '<ob<x>ject classid=clsid:ae24fdae-03c6-11d1-8b76-0080c744f389><param name=url value=ja<x>vascript:alert(\'XSS\')></OBJECT>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackEmbedFlash()
-    {
-        $testString = '<EMBED SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"></EMBED>';
-        $expectedString = '<em<x>bed SRC="http://ha.ckers.org/xss.swf" AllowScriptAccess="always"></EMBED>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackActionScriptEval()
-    {
-        $testString = 'a="get";b="URL("";c="javascript:";d="alert(\'XSS\');")";eval(a+b+c+d);";';
-        $expectedString = 'a="get";b="URL("";c="ja<x>vascript:";d="alert(\'XSS\');")";eval(a+b+c+d);";';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImageStyleWithComment()
-    {
-        $testString = '<IMG STYLE="xss:expr/*XSS*/ession(alert(\'XSS\'))">';
-        $expectedString = '<IMG st<x>yle="xss:expr/*XSS*/ession(alert(\'XSS\'))">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyleInAnonymousHtml()
-    {
-        $testString = '<XSS STYLE="xss:expression(alert(\'XSS\'))">';
-        $expectedString = '<XSS st<x>yle="xss:expression(alert(\'XSS\'))">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyleWithBackgroundImage()
-    {
-        $testString = '<STYLE>.XSS{background-image:url("javascript:alert(\'XSS\')");}</STYLE><A CLASS=XSS></A>';
-        $expectedString = '<st<x>yle>.XSS{background-image:url("ja<x>vascript:alert(\'XSS\')");}</STYLE><A CLASS=XSS></A>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStyleWithBackground()
-    {
-        $testString = '<STYLE type="text/css">BODY{background:url("javascript:alert(\'XSS\')")}</STYLE>';
-        $expectedString = '<st<x>yle type="text/css">BODY{background:url("ja<x>vascript:alert(\'XSS\')")}</STYLE>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackStylesheet()
-    {
-        $testString = '<LINK REL="stylesheet" HREF="javascript:alert(\'XSS\');">';
-        $expectedString = '<li<x>nk REL="stylesheet" HREF="ja<x>vascript:alert(\'XSS\');">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackRemoteStylesheet()
-    {
-        $testString = '<LINK REL="stylesheet" HREF="http://ha.ckers.org/xss.css">';
-        $expectedString = '<li<x>nk REL="stylesheet" HREF="http://ha.ckers.org/xss.css">';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-    /**
-     * @test
-     */
-    public function checkAttackImportRemoteStylesheet()
-    {
-        $testString = '<STYLE>@import\'http://ha.ckers.org/xss.css\';</STYLE>';
-        $expectedString = '<st<x>yle>@import\'http://ha.ckers.org/xss.css\';</STYLE>';
-        $actualString = RemoveXSS::process($testString);
-
-        $this->assertEquals($expectedString, $actualString);
-    }
-
-    /**
-     * @return array<array> input strings and expected output strings to test
-     *
-     * @see processWithDataProvider
-     */
-    public function processDataProvider()
-    {
-        return [
-            'attackWithHexEncodedCharacter' => [
-                '<a href="j&#x61;vascript:alert(123);">click</a>',
-                '<a href="ja<x>vascript:alert(123);">click</a>',
-            ],
-            'attackWithNestedHexEncodedCharacter' => [
-                '<a href="j&#x6&#x31;;vascript:alert(123);">click</a>',
-                '<a href="ja<x>vascript:alert(123);">click</a>',
-            ],
-            'attackWithUnicodeNumericalEncodedCharacter' => [
-                '<a href="j&#x6&#x31;;vascript:alert(123);">click</a>',
-                '<a href="ja<x>vascript:alert(123);">click</a>',
-            ],
-            'attackWithNestedUnicodeNumericalEncodedCharacter' => [
-                '<a href="j&#6&#53;;vascript:alert(123);">click</a>',
-                '<a href="ja<x>vascript:alert(123);">click</a>',
-            ],
-            'attack with null character' => [
-                '<scr' . chr(0) . 'ipt></script>',
-                '<sc<x>ript></script>'
-            ],
-            'attack with null character in attribute' => [
-                '<a href="j' . chr(0) . 'avascript:alert(123);"></a>',
-                '<a href="ja<x>vascript:alert(123);"></a>'
-            ],
-        ];
-    }
-
-    /**
-     * @test
-     *
-     * @param string $input input value to test
-     * @param string $expected expected output value
-     *
-     * @dataProvider processDataProvider
-     */
-    public function processWithDataProvider($input, $expected)
-    {
-        $this->assertEquals(
-            $expected,
-            RemoveXSS::process($input)
-        );
-    }
-
-    /**
-     * Allowed combinations
-     */
-    public function processValidDataProvider()
-    {
-        return [
-            'multibyte characters' => [
-                '<img®€ÜüÖöÄä></img>',
-            ],
-            'tab' => [
-                '<im' . chr(9) . 'g></img>',
-            ],
-            'line feed' => [
-                '<im' . chr(10) . 'g></img>',
-            ],
-            'carriage return' => [
-                '<im' . chr(13) . 'g></img>',
-            ],
-        ];
-    }
-
-    /**
-     * @test
-     * @param string $input Value to test
-     * @dataProvider processValidDataProvider
-     */
-    public function proccessValidStrings($input)
-    {
-        $this->assertEquals(
-            $input,
-            RemoveXSS::process($input)
-        );
-    }
-}
diff --git a/typo3/sysext/core/Tests/Unit/Utility/Fixtures/GeneralUtilityMinifyJavaScriptFixture.php b/typo3/sysext/core/Tests/Unit/Utility/Fixtures/GeneralUtilityMinifyJavaScriptFixture.php
deleted file mode 100644 (file)
index e6eaaa7..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-namespace TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures;
-
-/*
- * This file is part of the TYPO3 CMS project.
- *
- * It is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License, either version 2
- * of the License, or any later version.
- *
- * For the full copyright and license information, please read the
- * LICENSE.txt file that was distributed with this source code.
- *
- * The TYPO3 project - inspiring people to share!
- */
-
-use TYPO3\CMS\Core\Utility\GeneralUtility;
-
-/**
- * Fixture for javascript minification logging
- */
-class GeneralUtilityMinifyJavaScriptFixture extends GeneralUtility
-{
-    /**
-     * Logs message to the development log.
-     *
-     * @param string $errorMessage Message (in english).
-     * @throws \UnexpectedValueException
-     * @throws \RuntimeException
-     */
-    public static function devLog($errorMessage, $extKey, $severity = 0, $dataVar = false)
-    {
-        if ($errorMessage !== 'Error minifying java script: foo') {
-            throw new \UnexpectedValueException('broken', 1476122080);
-        }
-        throw new \RuntimeException('testing', 1476122081);
-    }
-}
index 874cdee..7626e52 100644 (file)
@@ -22,7 +22,6 @@ use TYPO3\CMS\Core\Package\PackageManager;
 use TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy;
 use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\GeneralUtilityFilesystemFixture;
 use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\GeneralUtilityFixture;
-use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\GeneralUtilityMinifyJavaScriptFixture;
 use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\OriginalClassFixture;
 use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\OtherReplacementClassFixture;
 use TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\ReplacementClassFixture;
@@ -913,123 +912,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
         $this->assertEquals($string, $decoded);
     }
 
-    ///////////////////////////////
-    // Tests concerning deHSCentities
-    ///////////////////////////////
-    /**
-     * @test
-     * @dataProvider deHSCentitiesReturnsDecodedStringDataProvider
-     */
-    public function deHSCentitiesReturnsDecodedString($input, $expected)
-    {
-        $this->assertEquals($expected, GeneralUtility::deHSCentities($input));
-    }
-
-    /**
-     * Data provider for deHSCentitiesReturnsDecodedString
-     *
-     * @return array
-     */
-    public function deHSCentitiesReturnsDecodedStringDataProvider()
-    {
-        return [
-            'Empty string' => ['', ''],
-            'Double encoded &' => ['&amp;amp;', '&amp;'],
-            'Double encoded numeric entity' => ['&amp;#1234;', '&#1234;'],
-            'Double encoded hexadecimal entity' => ['&amp;#x1b;', '&#x1b;'],
-            'Single encoded entities are not touched' => ['&amp; &#1234; &#x1b;', '&amp; &#1234; &#x1b;']
-        ];
-    }
-
-    //////////////////////////////////
-    // Tests concerning slashJS
-    //////////////////////////////////
-    /**
-     * @test
-     * @dataProvider slashJsDataProvider
-     */
-    public function slashJsEscapesSingleQuotesAndSlashes($input, $extended, $expected)
-    {
-        $this->assertEquals($expected, GeneralUtility::slashJS($input, $extended));
-    }
-
-    /**
-     * Data provider for slashJsEscapesSingleQuotesAndSlashes
-     *
-     * @return array
-     */
-    public function slashJsDataProvider()
-    {
-        return [
-            'Empty string is not changed' => ['', false, ''],
-            'Normal string is not changed' => ['The cake is a lie √', false, 'The cake is a lie √'],
-            'String with single quotes' => ['The \'cake\' is a lie', false, 'The \\\'cake\\\' is a lie'],
-            'String with single quotes and backslashes - just escape single quotes' => ['The \\\'cake\\\' is a lie', false, 'The \\\\\'cake\\\\\' is a lie'],
-            'String with single quotes and backslashes - escape both' => ['The \\\'cake\\\' is a lie', true, 'The \\\\\\\'cake\\\\\\\' is a lie']
-        ];
-    }
-
-    //////////////////////////////////
-    // Tests concerning rawUrlEncodeJS
-    //////////////////////////////////
-    /**
-     * @test
-     */
-    public function rawUrlEncodeJsPreservesWhitespaces()
-    {
-        $input = 'Encode \'me\', but leave my spaces √';
-        $expected = 'Encode %27me%27%2C but leave my spaces %E2%88%9A';
-        $this->assertEquals($expected, GeneralUtility::rawUrlEncodeJS($input));
-    }
-
-    //////////////////////////////////
-    // Tests concerning rawUrlEncodeJS
-    //////////////////////////////////
-    /**
-     * @test
-     */
-    public function rawUrlEncodeFpPreservesSlashes()
-    {
-        $input = 'Encode \'me\', but leave my / √';
-        $expected = 'Encode%20%27me%27%2C%20but%20leave%20my%20/%20%E2%88%9A';
-        $this->assertEquals($expected, GeneralUtility::rawUrlEncodeFP($input));
-    }
-
-    //////////////////////////////////
-    // Tests concerning strtoupper / strtolower
-    //////////////////////////////////
-    /**
-     * Data provider for strtoupper and strtolower
-     *
-     * @return array
-     */
-    public function strtouppperDataProvider()
-    {
-        return [
-            'Empty string' => ['', ''],
-            'String containing only latin characters' => ['the cake is a lie.', 'THE CAKE IS A LIE.'],
-            'String with umlauts and accent characters' => ['the càkê is ä lie.', 'THE CàKê IS ä LIE.']
-        ];
-    }
-
-    /**
-     * @test
-     * @dataProvider strtouppperDataProvider
-     */
-    public function strtoupperConvertsOnlyLatinCharacters($input, $expected)
-    {
-        $this->assertEquals($expected, GeneralUtility::strtoupper($input));
-    }
-
-    /**
-     * @test
-     * @dataProvider strtouppperDataProvider
-     */
-    public function strtolowerConvertsOnlyLatinCharacters($expected, $input)
-    {
-        $this->assertEquals($expected, GeneralUtility::strtolower($input));
-    }
-
     //////////////////////////////////
     // Tests concerning validEmail
     //////////////////////////////////
@@ -1957,32 +1839,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     }
 
     //////////////////////////////////
-    // Tests concerning lcFirst
-    //////////////////////////////////
-    /**
-     * Data provider for lcFirst
-     *
-     * @return array expected, input string
-     */
-    public function lcfirstDataProvider()
-    {
-        return [
-            'single word' => ['blogexample', 'blogexample'],
-            'single Word starting upper case' => ['blogexample', 'Blogexample'],
-            'two words' => ['blogExample', 'BlogExample']
-        ];
-    }
-
-    /**
-     * @test
-     * @dataProvider lcfirstDataProvider
-     */
-    public function lcFirst($expected, $inputString)
-    {
-        $this->assertEquals($expected, GeneralUtility::lcfirst($inputString));
-    }
-
-    //////////////////////////////////
     // Tests concerning isValidUrl
     //////////////////////////////////
     /**
@@ -2639,90 +2495,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     }
 
     /**
-     * Create an own hook callback class, register as hook, and check
-     * if given string to compress is given to hook method
-     *
-     * @test
-     */
-    public function minifyJavaScriptCallsRegisteredHookWithInputString()
-    {
-        $hookClassName = $this->getUniqueId('tx_coretest');
-        $minifyHookMock = $this->getMockBuilder('stdClass')
-            ->setMethods(['minify'])
-            ->setMockClassName($hookClassName)
-            ->getMock();
-        $functionName = $hookClassName . '->minify';
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName] = [];
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['obj'] = $minifyHookMock;
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['method'] = 'minify';
-        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_div.php']['minifyJavaScript'][] = $functionName;
-        $minifyHookMock->expects($this->once())->method('minify')->will($this->returnCallback([$this, 'isMinifyJavaScriptHookCalledCallback']));
-        GeneralUtility::minifyJavaScript('foo');
-    }
-
-    /**
-     * Callback function used in minifyJavaScriptCallsRegisteredHookWithInputString test
-     *
-     * @param array $params
-     */
-    public function isMinifyJavaScriptHookCalledCallback(array $params)
-    {
-        // We can not throw an exception here, because that would be caught by the
-        // minifyJavaScript method under test itself. Thus, we just die if the
-        // input string is not ok.
-        if ($params['script'] !== 'foo') {
-            die('broken');
-        }
-    }
-
-    /**
-     * Create a hook callback, use callback to throw an exception and check
-     * if the exception is given as error parameter to the calling method.
-     *
-     * @test
-     */
-    public function minifyJavaScriptReturnsErrorStringOfHookException()
-    {
-        $hookClassName = $this->getUniqueId('tx_coretest');
-        $minifyHookMock = $this->getMockBuilder('stdClass')
-            ->setMethods(['minify'])
-            ->setMockClassName($hookClassName)
-            ->getMock();
-        $functionName = '&' . $hookClassName . '->minify';
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName] = [];
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['obj'] = $minifyHookMock;
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['method'] = 'minify';
-        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_div.php']['minifyJavaScript'][] = $functionName;
-        $minifyHookMock->expects($this->any())->method('minify')->will($this->returnCallback([$this, 'minifyJavaScriptErroneousCallback']));
-        $error = '';
-        GeneralUtility::minifyJavaScript('string to compress', $error);
-        $this->assertSame('Error minifying java script: foo', $error);
-    }
-
-    /**
-     * Check if the error message that is returned by the hook callback
-     * is logged to \TYPO3\CMS\Core\GeneralUtility::devLog.
-     *
-     * @test
-     */
-    public function minifyJavaScriptWritesExceptionMessageToDevLog()
-    {
-        $hookClassName = $this->getUniqueId('tx_coretest');
-        $minifyHookMock = $this->getMockBuilder('stdClass')
-            ->setMethods(['minify'])
-            ->setMockClassName($hookClassName)
-            ->getMock();
-        $functionName = '&' . $hookClassName . '->minify';
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName] = [];
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['obj'] = $minifyHookMock;
-        $GLOBALS['T3_VAR']['callUserFunction'][$functionName]['method'] = 'minify';
-        $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['t3lib/class.t3lib_div.php']['minifyJavaScript'][] = $functionName;
-        $minifyHookMock->expects($this->any())->method('minify')->will($this->returnCallback([$this, 'minifyJavaScriptErroneousCallback']));
-        $this->expectException(\RuntimeException::class);
-        GeneralUtilityMinifyJavaScriptFixture::minifyJavaScript('string to compress');
-    }
-
-    /**
      * Callback function used in
      * minifyJavaScriptReturnsErrorStringOfHookException and
      * minifyJavaScriptWritesExceptionMessageToDevLog
@@ -3618,12 +3390,11 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     ///////////////////////////////
     // Tests concerning unQuoteFilenames
     ///////////////////////////////
+
     /**
-     * Data provider for ImageMagick shell commands
-     *
-     * @see explodeAndUnquoteImageMagickCommands
+     * Data provider for unQuoteFilenamesUnquotesFileNames
      */
-    public function imageMagickCommandsDataProvider()
+    public function unQuoteFilenamesUnquotesFileNamesDataProvider()
     {
         return [
             // Some theoretical tests first
@@ -3784,10 +3555,10 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     /**
      * Tests if the commands are exploded and unquoted correctly
      *
-     * @dataProvider imageMagickCommandsDataProvider
+     * @dataProvider unQuoteFilenamesUnquotesFileNamesDataProvider
      * @test
      */
-    public function explodeAndUnquoteImageMagickCommands($source, $expectedQuoted, $expectedUnquoted)
+    public function unQuoteFilenamesUnquotesFileNames($source, $expectedQuoted, $expectedUnquoted)
     {
         $actualQuoted = GeneralUtility::unQuoteFilenames($source);
         $actualUnquoted = GeneralUtility::unQuoteFilenames($source, true);
@@ -4571,39 +4342,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
     /**
      * @test
      */
-    public function callUserFunctionCanPrefixFuncNameWithFilePath()
-    {
-        $inputData = ['foo' => 'bar'];
-        $result = GeneralUtility::callUserFunction('typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php:TYPO3\\CMS\\Core\\Tests\\Unit\\Utility\GeneralUtilityTest->user_calledUserFunction', $inputData, $this);
-        $this->assertEquals('Worked fine', $result);
-    }
-
-    /**
-     * @test
-     */
-    public function callUserFunctionCanPersistObjectsBetweenCalls()
-    {
-        $inputData = ['called' => []];
-        GeneralUtility::callUserFunction('&TYPO3\\CMS\\Core\\Tests\\Unit\\Utility\\GeneralUtilityTest->user_calledUserFunctionCountCallers', $inputData, $this);
-        GeneralUtility::callUserFunction('&TYPO3\\CMS\\Core\\Tests\\Unit\\Utility\\GeneralUtilityTest->user_calledUserFunctionCountCallers', $inputData, $this);
-        $this->assertEquals(1, count($inputData['called']));
-    }
-
-    /**
-     * Takes the object hash and adds it to the passed array. In case
-     * persisting the objects would not work we'd see two different
-     * parent objects.
-     *
-     * @param $params
-     */
-    public function user_calledUserFunctionCountCallers(&$params)
-    {
-        $params['called'][spl_object_hash($this)]++;
-    }
-
-    /**
-     * @test
-     */
     public function callUserFunctionAcceptsClosures()
     {
         $inputData = ['foo' => 'bar'];