[TYPO3-german] Fwd: Extension Manager Problem

Gerald Draxler master_hax at gmx.net
Thu Jul 5 07:26:28 CEST 2012


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