[BUGFIX] Properly escape the ImageMagick frame selector 11/26711/2
authorGeorg Ringer <georg.ringer@gmail.com>
Thu, 9 Jan 2014 01:53:44 +0000 (02:53 +0100)
committerMarkus Klein <klein.t3@mfc-linz.at>
Thu, 9 Jan 2014 13:01:19 +0000 (14:01 +0100)
The frame selector looks like a glob pattern and gets interpreted as
such by the shell. Currently the generated shell argument is, for
example, 'image.png'[0] which matches a file called image.png0.
Thus, if such a file exists, the wrong argument would be passed to
ImageMagick.

Only if there is no filename that matches the pattern, the string is
correctly passed to ImageMagick (i.e. as-is). But even in that case
there is a performance penalty, because the shell has to scan the whole
directory to check if the file exists. This becomes especially bad if
you're not dealing with a local file system.

By properly escaping the frame selector we stop the shell from
interpreting the glob pattern and both problems get fixed.

Resolves: #31797
Releases: 6.2, 6.1
Change-Id: Ib6dc6556bb9f1d64a0154b0cbe9e253b185c74c2
Reviewed-on: https://review.typo3.org/26711
Reviewed-by: Markus Klein
Tested-by: Markus Klein
typo3/sysext/core/Classes/Imaging/GraphicalFunctions.php

index c6ea557..ff1a1bf 100644 (file)
@@ -2667,7 +2667,7 @@ class GraphicalFunctions {
                        } else {
                                $frame = '';
                        }
                        } else {
                                $frame = '';
                        }
-                       $cmd = \TYPO3\CMS\Core\Utility\GeneralUtility::imageMagickCommand('convert', $params . ' ' . $this->wrapFileName($input) . $frame . ' ' . $this->wrapFileName($output));
+                       $cmd = \TYPO3\CMS\Core\Utility\GeneralUtility::imageMagickCommand('convert', $params . ' ' . $this->wrapFileName($input . $frame) . ' ' . $this->wrapFileName($output));
                        $this->IM_commands[] = array($output, $cmd);
                        $ret = \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
                        // Change the permissions of the file
                        $this->IM_commands[] = array($output, $cmd);
                        $ret = \TYPO3\CMS\Core\Utility\CommandUtility::exec($cmd);
                        // Change the permissions of the file