Deutschland United States United Kingdom
ContentLion - Open Source CMS

Gefährlicher Bug!!!

Gefährlicher Bug!!!

Mir ist gerade ein gefährlicher Bug aufgefallen...
Und zwar werden immer nur einEvent-Handler ausgeführt, auch wenn 3 in der Datenbank stehen.
Der Fehler tritt aber schon in der Methode GetAllHandler() (EventManager) auf, welche die Events falsch ausliest, bzw. nur einen ausliest und dann falsch in den Cache schreibt.
So werden dann von 3 Events nur einer ausgeführt. ^^

Könntest du mir gleich die korrekte Datei senden (hier hochladen), damit meine Plugins weiterentwickeln kann? :D

Und ich dachte es geht um Sicherheit^^
Lösch mal das Verzeichnis content/cache und versuchs nochmal

Habe ich schon. :D
Das mache ich immer als erstes, wenn ein Problem auftritt. ^^ (SO blöd bin ich jetzt auch nicht. ^^ )
Aber der Fehler besteht weiterhin.
Wie gesagt, die Events werden schon falsch in den Cache geschrieben. ;)

Fehler gefunden! ^^

Folgende Zeilen in der Datei "system/classes/eventmanager.php" müssen wie folgt abgeändert werden:

PHP-Quelltext

1
2
3
4
5
6
7
8
9
$rows DataBase::Current()->ReadRows("SELECT * FROM {'dbprefix'}events");

               foreach($rows as $handler){  print_r($handler);

                   if(!isset($item[$handler->event])){
                     $res[$handler->event] = array();
                   }

                   $res[$handler->event][] = $handler->file;


muss so so abgeändert werden, dass es dann so aussieht:

PHP-Quelltext

1
2
3
4
5
 $rows DataBase::Current()->ReadRows("SELECT * FROM {'dbprefix'}events");

               foreach ($rows as $handler) {
                   $res[$handler->event][] = $handler->file;
               }


Folglich entfallen die genannten Zeilen, wieso es jetzt funktioniert weiß ich nicht, ich nehme aber an, dass es daran liegt, dass man das nicht einfach als Array nehmen kann, weil es ein stdClass o.ä. ist.
Naja, Hauptsache, es geht jetzt! :D

Die komplette Datei zum Download findet ihr im Anhang. ;)
»JuKu« hat folgende Datei angehängt:
  • eventmanager.zip (849 Byte - 142 mal heruntergeladen - zuletzt: Gestern, 13:51)

So produzierst beim ersten Event ne Warning, weil es noch kein Array ist. Der eigentliche Fehler ist, dass wir $item statt $res nutzen ;-)

Also bei mir tritt kein Fehler auf, weil PHP das automatisch als Array sieht (ab PHP5; siehe php.net). ^^
Den eig. Fehler habe ich gar nicht bemerkt, aber ich habe den ganzen Code einfach neu geschrieben und da war der Fehler dann weg. :D

Mir ist gerade ein weiterer Bug aufgefalen, wenn der Pfad zum Plugin-Events Ordner zu lang ist, wird dieser abgeschnitten.
Das liegt daran, dass in der Datenbank nur 50 Zeichen zugelassen sind (

MySQL-Abfrage(n)

1
VARCHAR(50)
).
Ich habe dies jetzt bei mir auf 80 Zeichen gesetzt. :D

MySQL-Abfrage(n)

1
ALTER TABLE `contentlion_events` CHANGE `file` `file` VARCHAR( 80 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL


EDIT:
Das große Problem ist, dass die Daten dann beim Deaktivieren auch nicht aus der Datenbank gelöscht werden, da die Angaben in der deactivate.php dann ja auch nicht mehr stimmen. :D

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JuKu« (25. Juli 2012, 16:03)


Klar, PHP erzeugt es automatisch, mit strikteren Einstellungen bekommst aber Probleme.

Zu MySQL:
Was genau willst dort denn reinschreiben?

Quellcode

1
system/plugins/usercounterskin/events/content_bottom.php
:D

Ich habe jetzt alle die hiergenannten fehler korrigiert und bei SVN eingecheckt. :D
(Habe es beim EventManager so gemacht, wie du gesagt hast, also mit if-Abfrage. ^^ )

Darf ich mir eig. auch Sachen aus BugZilla aussuchen und die erstellen / ändern? :D
Wenn ja, würde ich mich evtl. dem Berechtigungssystem einmal annehmen. ;)

bugzilla: jo, nur zu. Am besten immer Inhalte hinzufügen oder auch anderen zuweisen.

Bzgl. Events: Mach die mal direkt auf 255 Zeichen ;-)