[TYPO3-german] Fwd: Extension Manager Problem

Gerald Draxler master_hax at gmx.net
Thu Jul 5 10:23:35 CEST 2012


Hallo Steffen.

Die genaue Änderung war in der Datei class.typo3ajax.php in der Methode renderAsJSON().

Dort gibt es die Code-Zeile (im Standard-Code):
$content = json_encode($this->content);

Diese Zeile haben wir erstetzt mit
$content = __json_encode($this->content);

Somit wird die zuvor gepostete Methode aufgerufen und dann klappt das wieder. Das Problem liegt also an der nativen PHP (5.3.14) Methode json_encode().

Hoffe das beantwortet deine Frage!
lg


-------- Original-Nachricht --------
> Datum: Thu, 05 Jul 2012 08:25:00 +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, 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
> 
> _______________________________________________
> 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