[!!!][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
@@ -691,21 +668,6 @@ class GeneralUtility
         return implode(',', $list);
     }
 
-    /**
-     * 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
      *
@@ -892,20 +854,6 @@ class GeneralUtility
         return number_format($sizeInUnits, (($multiplier > 0) && ($sizeInUnits < 20)) ? 2 : 0, $localeInfo['decimal_point'], '') . $labelArr[$multiplier];
     }
 
-    /**
-     * 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
      *
@@ -929,67 +877,6 @@ class GeneralUtility
         return $res;
     }
 
-    /**
-     * 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
      *
@@ -1027,51 +914,6 @@ class GeneralUtility
         return filter_var($user . '@' . $domain, FILTER_VALIDATE_EMAIL) !== false;
     }
 
-    /**
-     * 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
      *
@@ -1091,19 +933,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
@@ -1141,20 +970,6 @@ class GeneralUtility
         return mb_strtolower($value, 'utf-8');
     }
 
-    /**
-     * 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).
      *
@@ -1383,21 +1198,6 @@ class GeneralUtility
         return $outArr;
     }
 
-    /**
-     * 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);
@@ -1627,26 +1422,6 @@ class GeneralUtility
         return $tagi['ch'];
     }
 
-    /**
-     * 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.
@@ -1955,22 +1730,6 @@ class GeneralUtility
         return $XMLcontent;
     }
 
-    /**
-     * 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
      *
@@ -2640,18 +2399,6 @@ class GeneralUtility
         return $bytes;
     }
 
-    /**
-     * 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
      *
@@ -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);
@@ -3625,78 +3363,11 @@ class GeneralUtility
         return null;
     }
 
-    /**
-     * 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);
         }
     }
 
@@ -4158,37 +3762,6 @@ class GeneralUtility
         return $error;
     }
 
-    /**
-     * 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
      *
@@ -4223,22 +3796,6 @@ class GeneralUtility
         return $inUrl;
     }
 
-    /**
-     * 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.
      *
@@ -4506,26 +4063,9 @@ class GeneralUtility
         return $str;
     }
 
-    /**
-     * 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
@@ -4582,34 +4122,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
      *
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
     //////////////////////////////////
@@ -1956,32 +1838,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
         $this->assertEquals($expected, GeneralUtility::camelCaseToLowerCaseUnderscored($inputString));
     }
 
-    //////////////////////////////////
-    // 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
     //////////////////////////////////
@@ -2638,90 +2494,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
         $this->assertSame($testString, GeneralUtility::minifyJavaScript($testString));
     }
 
-    /**
-     * 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
@@ -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);
@@ -4568,39 +4339,6 @@ class GeneralUtilityTest extends \TYPO3\TestingFramework\Core\Unit\UnitTestCase
         return 'Worked fine';
     }
 
-    /**
-     * @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
      */