[TYPO3-core] RFC #13750: Bug: Several GIFBUILDER features broken for IM4, IM6 and GM

Joerg Wagner [DigiLog] lists.typo3.org at digilog.de
Thu Mar 11 12:22:26 CET 2010


Hi Susanne,

thanks for taking the time to look into this and sorry for my late 
response - I was out of the office for some days.

I did some further investigation on this to respond your questions.

As Jacob Rasmussen pointed out already, the faulty behavior shows up on 
Windows systems. But the reason lies deeper and can affect Linux systems 
too.

Here are all details:

The path+file parts in the parameters argument of 
t3lib_div::unQuoteFilenames($parameters) are treated with a function 
wrapFileName() before they are concatenated into the parameters argument 
(see class.t3lib_stdgraphic.php, function combineExec).
wrapFileName() in turn uses the PHP function excapeshellarg to add 
surrounding quotes and to escape inner quotes in these strings.
Now, excapeshellarg works differently on Windows and on Linux: On Linux 
it puts single quotes around its argument, on Windows it uses double 
quotes (see http://www.php.net/manual/en/function.escapeshellarg.php, 
user comment by Egorinsk).

So we end up with something like this:
LINUX
+profile '*' -compose over +matte 
'typo3temp/temp/969233c0cf24db7f144048d059b1032a_menuNT.gif' ...
WINDOWS
+profile '*' -compose over +matte 
"typo3temp/temp/969233c0cf24db7f144048d059b1032a_menuNT.gif" ...

Now, our beloved function unQuoteFilenames() only checks for double 
quotes when trying to do its explode-like job. So on Linux the whole 
algorithm never really activates - and the bug in it never shows up.

You can easily test this by doing static calls to unQuoteFilenames() in 
your IDE:

t3lib_div::unQuoteFilenames('aaa bbb "ccc ddd"')
: array =
   0: string = "aaa"
   1: string = "bbb"
   2: string = "\"ccc ddd\""
(CORRECT!)

t3lib_div::unQuoteFilenames("aaa bbb 'ccc ddd'")
: array =
   0: string = "aaa"
   1: string = "bbb"
   2: string = "'ccc"
   3: string = "ddd'"
(WRONG BECAUSE OF SINGLE QUOTES - argument 3 is split up!!!)

t3lib_div::unQuoteFilenames('aaa bbb "ccc" "ddd" "eee"')
: array =
   0: string = "aaa"
   1: string = "bbb"
   2: string = "\"ccc\" \"ddd\""
   3: string = "\"eee\""
(WRONG BECAUSE OF THE BUG - arguments 3 and 4 are joint!!!)

t3lib_div::unQuoteFilenames("aaa bbb 'ccc' 'ddd' 'eee'")
: array =
   0: string = "aaa"
   1: string = "bbb"
   2: string = "'ccc'"
   3: string = "'ddd'"
   4: string = "'eee'"
(CORRECT, but only because with single quotes the function's algorithm 
is dead.)


SOLUTION:
I propose to use my patch, but add more to it so that the function 
becomes single quote aware and thus also works correctly with Linux-like 
quoting.
I will add a new patch that does this to the bug report within the next 
hours.

Cheers,
Jörg.

schrieb Susanne Moog am 06.03.2010 16:07:
> Hi Jörg,
>
> Joerg Wagner [DigiLog] wrote:
>> This is an SVN patch request.
>>
>> Type: Bugfix
>>
>> Bugtracker references:
>> http://bugs.typo3.org/view.php?id=13750
>>
>> Branches:
>> TYPO3_4-3&  trunk
>> TYPO3_4-2&  trunk
>>
>> Problem:
>> When IM4, IM6 or GM are used, several GIFBUILDER features that
>> internally use mask images (e.g. SHADOW and NICETEXT) are broken.
>> The reason is a flawed processing of quoted subparts in IM commands.
>> This flaw probably has many more side effects!
>>
>> Solution:
>> When testing substrings for leading quotes, function
>> t3lib_div::unQuoteFilenames() may only go into "start quote found" mode
>> if the substring does not also contain a trailing quote. This is done by
>> a simple change of the regular expression used to detect leading quotes.
>
> Any hints how to reproduce this behavior? I used the following TS on
> Ubuntu / GraphicsMagick and the quoting results were the same before and
> after the patch (both correct).
>
> page.130 = IMAGE
> page.130 {
>    file = GIFBUILDER
>    file {
>      XY = 200,50
>      format = jpg
>      quality = 88
>      backColor = #FFFFFF
>      10 = TEXT
>      10 {
>        text = Hallo Weltas!
>        fontColor = #000000
>        fontSize = 38
>        fontFile = fileadmin/Acapulco.ttf
>        offset = 0,40
>      }
>      20 = SHADOW
>      20 {
>        blur = 30
>        color = #FF00FF
>        textObjNum = 10
>      }
>    }
> }
>
>
> Result:
> Array
> (
>      [0] =>  +profile
>      [1] =>  '*'
>      [2] =>  -compose
>      [3] =>  over
>      [4] =>  +matte
>      [5] =>  'typo3temp/temp/a885e075fed9608a611a2ea024b2a869_menu.gif'
>      [6] =>  'typo3temp/temp/a885e075fed9608a611a2ea024b2a869_color.gif'
>      [7] =>  'typo3temp/temp/f9702ffd24d69faf71be62210fd6d47f.gif'
>      [8] =>  'typo3temp/temp/a885e075fed9608a611a2ea024b2a869_menu.gif'
> )
>
> Best regards,
>
> Susanne
>
>


More information about the TYPO3-team-core mailing list