[TYPO3-german] Fwd: Extension Manager Problem
Steffen Gebert
steffen.gebert at typo3.org
Thu Jul 5 08:25:00 CEST 2012
Ja, Core-Hacking ist natürlich schlecht.
Was hast du an der Methode geändert?
Kind regards
Steffen
--
Steffen Gebert
TYPO3 v4 Core Team Member
TYPO3 Server Administration Team Member
TYPO3 .... inspiring people to share!
Get involved: http://typo3.org
I work for TYPO3 solely in my spare time. If you think that
my work helps you running your business, you are invited to
send me a donation via PayPal to this email address. Thanks
Am 7/5/12 7:26 AM, schrieb Gerald Draxler:
> Hallo Steffen.
>
> Haben einen Workaround für dieses Problem gefunden.
>
> Haben in der class.typo3ajax.php die Methode __json_encode() mit dieser hier ersetzt.
>
> function __json_encode( $data ) {
> if( is_array($data) || is_object($data) ) {
> $islist = is_array($data) && ( empty($data) || array_keys($data) === range(0,count($data)-1) );
>
> if( $islist ) {
> $json = '[' . implode(',', array_map('__json_encode', $data) ) . ']';
> } else {
> $items = Array();
> foreach( $data as $key => $value ) {
> $items[] = __json_encode("$key") . ':' . __json_encode($value);
> }
> $json = '{' . implode(',', $items) . '}';
> }
> } elseif( is_string($data) ) {
> # Escape non-printable or Non-ASCII characters.
> # I also put the \\ character first, as suggested in comments on the 'addclashes' page.
> $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
> $json = '';
> $len = strlen($string);
> # Convert UTF-8 to Hexadecimal Codepoints.
> for( $i = 0; $i < $len; $i++ ) {
> $char = $string[$i];
> $c1 = ord($char);
>
> # Single byte;
> if( $c1 <128 ) {
> $json .= ($c1 > 31) ? $char : sprintf("\\u%04x", $c1);
> continue;
> }
>
> # Double byte
> $c2 = ord($string[++$i]);
> if ( ($c1 & 32) === 0 ) {
> $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
> continue;
> }
>
> # Triple
> $c3 = ord($string[++$i]);
> if( ($c1 & 16) === 0 ) {
> $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) << 6) + ($c3 - 128));
> continue;
> }
>
> # Quadruple
> $c4 = ord($string[++$i]);
> if( ($c1 & 8 ) === 0 ) {
> $u = (($c1 & 15) << 2) + (($c2>>4) & 3) - 1;
>
> $w1 = (54<<10) + ($u<<6) + (($c2 & 15) << 2) + (($c3>>4) & 3);
> $w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
> $json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
> }
> }
> } else {
> # int, floats, bools, null
> $json = strtolower(var_export( $data, true ));
> }
> return $json;
> }
>
> Jetzt klappt es wieder. Ist zwar nicht die beste Lösung, weil wir bei jedem Typo3 update jetzt auch schauen müssen, ob der Extension Manager noch funktioniert.
>
> Vielleicht fällt dir etwas besseres ein!
>
> lg Gerald
>
>
> -------- Original-Nachricht --------
>> Datum: Wed, 04 Jul 2012 09:23:35 +0200
>> Von: Steffen Gebert <steffen.gebert at typo3.org>
>> An: typo3-german at lists.typo3.org
>> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
>
>> Hallo Gerald,
>>
>> kannst du darauf mal ein json_encode() machen und schaun, wo es
>> abgeschnitten wird?
>>
>> Kind regards
>> Steffen
>>
>> --
>> Steffen Gebert
>> TYPO3 v4 Core Team Member
>> TYPO3 Server Administration Team Member
>>
>> TYPO3 .... inspiring people to share!
>> Get involved: http://typo3.org
>>
>> I work for TYPO3 solely in my spare time. If you think that
>> my work helps you running your business, you are invited to
>> send me a donation via PayPal to this email address. Thanks
>>
>>
>> Am 6/28/12 9:42 AM, schrieb Gerald Draxler:
>>> Hallo Steffen.
>>> Erstmal vielen Dank für deine Hilfe!
>>>
>>> $TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';
>>> $TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';
>>>
>>> wenn ich $this->content ausgebe bekomme ich beim Aufruf der verfügbaren
>> Extensions folgendes array zurück:
>>>
>>> Array
>>> (
>>> [0] => Array
>>> (
>>> [tid] => 7
>>> [action] => ExtDirect
>>> [method] => setState
>>> [type] => rpc
>>> [result] => Array
>>> (
>>> [success] => 1
>>> [params] => stdClass Object
>>> (
>>> [scope] => stdClass Object
>>> (
>>> [events] => stdClass Object
>>> (
>>> [savefailure] => 1
>>> [savesuccess] => 1
>>> [readfailure] => 1
>>> [readsuccess] => 1
>>> [statechange] => 1
>>> )
>>>
>>> [state] => stdClass Object
>>> (
>>> [mainTab] => stdClass
>> Object
>>> (
>>> [activeTab] => 1
>>> )
>>>
>>> [LocalList] => stdClass
>> Object
>>> (
>>> [columns] => Array
>>> (
>>> [0] =>
>> stdClass Object
>>> (
>>>
>> [id] => 0
>>>
>> [width] => 20
>>>
>> [sortable] => 1
>>> )
>>>
>>> [1] =>
>> stdClass Object
>>> (
>>>
>> [id] => 1
>>>
>> [width] => 47
>>>
>> [sortable] => 1
>>> )
>>>
>>> [2] =>
>> stdClass Object
>>> (
>>>
>> [id] => 2
>>>
>> [width] => 744
>>>
>> [sortable] => 1
>>> )
>>>
>>> [3] =>
>> stdClass Object
>>> (
>>>
>> [id] => 3
>>>
>> [width] => 397
>>>
>> [sortable] => 1
>>> )
>>>
>>> [4] =>
>> stdClass Object
>>> (
>>>
>> [id] => 4
>>>
>> [width] => 347
>>>
>> [hidden] => 1
>>>
>> [sortable] => 1
>>> )
>>>
>>> [5] =>
>> stdClass Object
>>> (
>>>
>> [id] => 5
>>>
>> [width] => 596
>>>
>> [hidden] => 1
>>>
>> [sortable] => 1
>>> )
>>>
>>> [6] =>
>> stdClass Object
>>> (
>>>
>> [id] => 6
>>>
>> [width] => 248
>>>
>> [hidden] => 1
>>>
>> [sortable] => 1
>>> )
>>>
>>> [7] =>
>> stdClass Object
>>> (
>>>
>> [id] => 7
>>>
>> [width] => 100
>>>
>> [sortable] => 1
>>> )
>>>
>>> )
>>>
>>> [sort] => stdClass
>> Object
>>> (
>>> [field] =>
>> title
>>> [direction]
>> => DESC
>>> )
>>>
>>> [group] => category
>>> [filters] =>
>> stdClass Object
>>> (
>>> )
>>>
>>> )
>>>
>>> [em-languagegrid] =>
>> stdClass Object
>>> (
>>> [columns] => Array
>>> (
>>> [0] =>
>> stdClass Object
>>> (
>>>
>> [id] => checker
>>>
>> [width] => 20
>>> )
>>>
>>> [1] =>
>> stdClass Object
>>> (
>>>
>> [id] => lang-label
>>>
>> [width] => 103
>>>
>> [sortable] => 1
>>> )
>>>
>>> [2] =>
>> stdClass Object
>>> (
>>>
>> [id] => lang-key
>>>
>> [width] => 103
>>>
>> [sortable] => 1
>>> )
>>>
>>> )
>>>
>>> [sort] => stdClass
>> Object
>>> (
>>> [field] =>
>> label
>>> [direction]
>> => ASC
>>> )
>>>
>>> )
>>>
>>> )
>>>
>>> [delay] => 750
>>> [dirty] =>
>>> [started] => 1
>>> [autoStart] => 1
>>> [autoRead] =>
>>> [key] => moduleData.tools_em.States
>>> [logFailure] =>
>>> [logSuccess] =>
>>> [queue] => Array
>>> (
>>> [0] => stdClass Object
>>> (
>>> [name] => mainTab
>>> [value] => stdClass
>> Object
>>> (
>>> [activeTab]
>> => 0
>>> )
>>>
>>> )
>>>
>>> )
>>>
>>> [saveBaseParams] => stdClass Object
>>> (
>>> )
>>>
>>> [readBaseParams] => stdClass Object
>>> (
>>> )
>>>
>>> [paramNames] => stdClass Object
>>> (
>>> [key] => key
>>> [name] => name
>>> [value] => value
>>> [data] => data
>>> )
>>>
>>> [dt] => stdClass Object
>>> (
>>> )
>>>
>>> )
>>>
>>> [queue] => Array
>>> (
>>> [0] => stdClass Object
>>> (
>>> [name] => mainTab
>>> [value] => stdClass Object
>>> (
>>> [activeTab] => 0
>>> )
>>>
>>> )
>>>
>>> )
>>>
>>> [params] => stdClass Object
>>> (
>>> [key] => moduleData.tools_em.States
>>> [data] =>
>> [{"name":"mainTab","value":{"activeTab":0}}]
>>> )
>>>
>>> )
>>>
>>> )
>>>
>>> [debug] =>
>>> )
>>>
>>> )
>>>
>>>
>>> -------- Original-Nachricht --------
>>>> Datum: Thu, 28 Jun 2012 08:53:28 +0200
>>>> Von: Steffen Gebert <steffen.gebert at typo3.org>
>>>> An: typo3-german at lists.typo3.org
>>>> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
>>>
>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>> Hash: SHA1
>>>>
>>>> Hallo Gerald,
>>>>
>>>> okay, die Stelle hatte ich mir schon angeschaut. Nur der Rückgabewert
>>>> wird da eben nicht weiter geprüft, aber das Ergebnis scheint jetzt
>>>> tatsächlich anders zu sein.
>>>>
>>>>> protected function renderAsJSON() {
>>>>> // If the backend does not run in UTF-8 then we need to convert it
>> to
>>>> unicode as
>>>>> // the json_encode method will return empty otherwise
>>>>> if ($this->charset != $this->requestCharset) {
>>>>> $GLOBALS['LANG']->csConvObj->convArray($this->content,
>> $this->charset,
>>>> $this->requestCharset);
>>>>> }
>>>>>
>>>>> $content = json_encode($this->content);
>>>>
>>>> Ich würde mal vermuten, dass dein System nicht korrekt konifguiert
>> ist.
>>>> Was hast du für $TYPO3_CONF_VARS['BE']['forceCharset'] sowie bei
>> DBinit?
>>>>
>>>> Du könntest auch mal den Wert von $this->content direkt ausgeben
>> lassen
>>>> (und dann zB über Firebug die Ausgabe des AJAX-calls begutachten).
>> Dann
>>>> wüssten wir jedenfalls, woher der falsch kodierte Inhalt kommt.
>>>>
>>>> Kind regards
>>>> Steffen
>>>>
>>>> - --
>>>> Steffen Gebert
>>>> TYPO3 v4 Core Team Member
>>>> TYPO3 Server Administration Team Member
>>>>
>>>> TYPO3 .... inspiring people to share!
>>>> Get involved: http://typo3.org
>>>>
>>>> I work for TYPO3 solely in my spare time. If you think that
>>>> my work helps you running your business, you are invited to
>>>> send me a donation via PayPal to this email address. Thanks
>>>>
>>>> On 28.06.12 08:35, Gerald Draxler wrote:
>>>>> Hier das gesamte Feedback von unserem Hoster:
>>>>>
>>>>> "wir konnten den Fehler auf ein Versionsupdate von PHP 5.3.13 auf
>> 5.3.14
>>>> zurückführen, das am Freitag vorgenommen wurde.
>>>>>
>>>>> Ein Trace Ihrer PHP-Prozesse liefert:
>>>>>
>>>>> write(4, "o\1\0\0\3INSERT INTO sys_log
>>>>> (userid,type,action,error,details_nr,details,IP,tstamp,workspace)
>> VALUES
>>>>> ('5','5','0','1','0','Core: Error handler (BE): PHP Warning:
>>>> json_encode() [<a
>>>>> href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
>> UTF-8
>>>> sequence in argument in
>>>> /usr/www/users/standm/typo3/classes/class.typo3ajax.php
>>>>> line 275','80.150.215.98','1340635563','0')", 371) = 371 read(4,
>>>> "\t\0\0\1\0\1\374%\2\2\0\0\0", 16384) = 13
>>>>>
>>>>> Hier wird folgende Fehlermeldung ins Typo3 Datenbank-Log geschrieben:
>>>>> Core: Error handler (BE): PHP Warning: json_encode() [<a
>>>>> href=\\'function.json-encode\\'>function.json-encode</a>]: Invalid
>> UTF-8
>>>> sequence in argument in
>>>> /usr/www/users/standm/typo3/classes/class.typo3ajax.php
>>>>> line 275
>>>>>
>>>>> Dieser Fehler hängt höchstwahrscheinlich mit folgender Änderung
>>>> zusammen, die das PHP Entwicklerteam in Version 5.3.14 vorgenommen hat:
>>>>>
>>>>> - JSON: Fixed bug #61537 (json_encode() incorrectly truncates/discards
>>>>> information)
>>>>>
>>>>> Changelog einzusehen unter: http://www.php.net/ChangeLog-5.php
>>>>> Link zum entsprechenden PHP-Bugreport: http://bugs.php.net/61537
>>>>>
>>>>> Im Klartext heißt das, dass die PHP-Funktion json_encode() bei
>>>> fehlerhaftem Input nun NULL statt false zurückliefert, dies bringt
>> offenbar Ihren
>>>> Erweiterungsmanager durcheinander - an die entsprechende Funktion wurde
>>>> bereits vor dem Update wohl fehlerhaft codierter UTF-8 Input
>> übergeben, die
>>>> Funktion überging dies aber (inkorrekter Weise), indem Sie einfach
>> NULL
>>>> zurücklieferte - nun wird aber false zurückgegeben und ein
>> Typo3-Fehler
>>>> ausgelöst.
>>>>>
>>>>> Korrekter Weg, dies zu lösen wäre aus unserer Sicht, den
>> fehlerhaften
>>>> Input zu vermeiden, stellt sich die Frage, woher dieser Input stammt,
>>>> vermutlich aus Ihrer Datenbank - ohne die Typo3-Sourcen zu debuggen
>> können wir
>>>> dies aber nicht feststellen."
>>>>>
>>>>>
>>>>> Sie haben von der Tabelle sys_log den Fehler entnommen und dieser wir
>>>> eingetragen (wie schon weiter unten erwähnt), wenn der
>> Extension-Manager
>>>> aufgerufen wird.
>>>>>
>>>>> Beste Grüße
>>>>>
>>>>>
>>>>> -------- Original-Nachricht --------
>>>>>> Datum: Wed, 27 Jun 2012 17:10:56 +0200
>>>>>> Von: Steffen Gebert <steffen.gebert at typo3.org>
>>>>>> An: typo3-german at lists.typo3.org
>>>>>> Betreff: Re: [TYPO3-german] Fwd: Extension Manager Problem
>>>>>
>>>>> Ja, soweit hab ich das schon verstanden, nur versteh ich noch nicht,
>> wo
>>>>> die fehlerhafte Stelle im Code sein soll.
>>>>>
>>>>> Kind regards
>>>>> Steffen
>>>>>
>>>> _______________________________________________
>>>> TYPO3-german mailing list
>>>> TYPO3-german at lists.typo3.org
>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>>>
>>>> -----BEGIN PGP SIGNATURE-----
>>>> Version: GnuPG/MacGPG2 v2.0.17 (Darwin)
>>>> Comment: GPGTools - http://gpgtools.org
>>>> Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/
>>>>
>>>> iQEcBAEBAgAGBQJP6/9oAAoJEIskG/rSlyw4Nv0IAKb2lrYGFit6nJ0ktsSgVyUm
>>>> 1tAezaSxTonLLyJEeXtqAOJgFOCHwg/dxOsMjRaGtnqad18C3PHntjY65xq9My/1
>>>> PYCL6T6MLdDt41L96cPu1sBp+cTcsVjkr9Pca/0X/D3LTn8VneBa47x3KVWIr+G4
>>>> /trBu05mhfa2N6bX4VPHkxrT3i8y4bNdKwG4Yh5BRfes8h4JrwRUifEhzsa4T+KO
>>>> 1Al+9hApjcvk05Z2k+x/iB9g25/gDOa5OBUJB5c46L1PT2JzgZDJRHAbrLS34cWt
>>>> VUttCRalW7LyXMGBFpBcnwDgwpVgIU+UB3+RxDJqoZallAA+mOCC+Lfivhbc5sg=
>>>> =ZY24
>>>> -----END PGP SIGNATURE-----
>>>> _______________________________________________
>>>> TYPO3-german mailing list
>>>> TYPO3-german at lists.typo3.org
>>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
>>
>> _______________________________________________
>> TYPO3-german mailing list
>> TYPO3-german at lists.typo3.org
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
More information about the TYPO3-german
mailing list