WinFuture-Forum.de: Ipb V2.0.3 Highlightning Bug Fixen - WinFuture-Forum.de

Zum Inhalt wechseln

Hinweis

Alle neuen Themen werden vor der Veröffentlichung durch einen Moderator geprüft und sind deshalb nicht sofort sichtbar.
Seite 1 von 1

Ipb V2.0.3 Highlightning Bug Fixen nur interessant für ipb board admins


#1 Mitglied ist offline   mo 

  • Gruppe: aktive Mitglieder
  • Beiträge: 1.796
  • Beigetreten: 17. Juni 02
  • Reputation: 0
  • Wohnort:Ulm / BaWü

geschrieben 29. November 2004 - 18:29

Guten Abend,

wir hatten heute auf dem WinFuture-Forenserver extreme Performanceprobleme. Einige (wenige) Apache Prozesse haben alle CPU Cycles die sie bekommen konnten gefressen. Der MySQL Server lief normal weiter.

Schuld war ein Fehler in sources/topics.php in v2.0.3 (alte Versionen haben evtl. den selben Fehler). Etwa ab Zeile 810 wird der 'hl' (highlight) Parameter in der sources/topics.php auseinander genommen. Mehrere Wörter die gehighlighted werden sollen, werden mit ",and," und ",or," getrennt. So die Theorie. Aber genau in dem duzend Zeilen Code die den Parameter auseinanderfriemeln hat sich ein Fehler eingeschlichen. Wieso überhaupt auf so umständliche Weise der Parameter verwurstet wurde versteh ich nicht. Noch weniger verstehe ich, warum nach Tagen noch kein Bugfix vom Hersteller zur Verfügung steht. (bitte korrigiert mich wenn ich falsch liege)

if ( preg_match("/,(and|or),/i", $keywords) )
{
// Hier ist der Fehler: wenn er ,and, oder ,or, findet, macht er bis in alle ewigkeit eine whileschleife ... oder das php zeitlimit erreich ist
// Here's the bug: if he finds a match for ,and, or ,or, he'll compute for ever ... or the php timelimit got hit...
     while ( preg_match("/,(and|or),/i", $keywords, $match) )
     {
          $word_array = explode( ",".$match[1].",", $keywords );
     }
}

naja .. man sieht unschwer, dass er in der whileschleife hängen bleibt.

meine Lösung (ich erhebe keinen Anspruch auf Richtigkeit! Benutzung auf eigene Gefahr)
if ( preg_match("/,(and|or),/i", $keywords ) ) {
   // ",and," oder ",or" gefunden
   // --> nach diesen steuerzeichen trennen
   // --> split with these keywords

   // nach ',and,' und ',or,' soll getrennt werden (wer diesen quatsch bei den übergabeparametern verbrochen hat weis ich auch nicht, warum kann man nicht einfach nach einem schlüsselwort trennen?)
   // we'll split with keywords ',and,' and ',or,' (who the hell programmed these parameters? why cant we just split it with one keyword?)
   $suchmuster[0] = "/,and,/";
   $suchmuster[1] = "/,or,/";
   $ersetzungen[0] = ",";
   $ersetzungen[1] = ",";
   $word_array = explode ( ",",  preg_replace ( $suchmuster, $ersetzungen, $keywords ) );
}


Diesen Bug ausgenutzt lässt sich ein Forum stark verlangsamen oder gar unerreichbar machen. So oder so kommen aber Besucher hin und wieder auf diese Parameter, wenn sie die Suchfunktion verwenden.

Viele Grüße,
mo
I'm mó. mo's good twin.
0

Anzeige



Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0