[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