Bug in PHP 4.2.3?

Bash, Shell, PHP, Python, Perl, CGI
henock
Posts: 17
Joined: 2002-07-12 15:11

Bug in PHP 4.2.3?

Post by henock »

HiHo,

ich bin u.U. ueber einen Bug in der PHP 4.2.3 Engine gestolpert, das koennte auch fuer andere Entwickler interessant sein.

PHP 4.2.3 scheint Probleme zu bekommen, wenn man mit uninitialisierte Variablen in
Verbindung mit extensiever Nuztung von Klassen/Objekten hantiert.
Ich hatte an einer Stelle meiner Klassenbibliothek Methoden, welche entweder ein Ergbnis liefern (z.B.: ein array) oder nichts (null). Die Variable, die im Falle eines Ergebnisses Temporaer genutzt wird um das Ergebnis zu erzeugen, wird nicht explizit initialisiert.
Der Code der die entsprechenden Methoden aufruft (in einer anderen Klasse, nicht mit der aufegrufenen Klasse verwandt), faengt ab, ob ein Ergebnis vorliegt, oder ob nichts zureuckgeliefert wurde.
Dieses Vorgehen klappte nun schon seit ueber 2 Monaten Entwicklungszeit. Gestern leitete ich eine neue visuelle Klasse von einer meiner Basisklassen ab, und es wurde seeeehr ulkig.
Das Skript verfiel in eine Art infinite Loop (100% CPU-Last). Wenn man bis zum Timeout durch den Apache wartete, bekam man mehrere tausend Zeilen Error-Messages, welche einem bizarre Fehlermeldungen vorwarfen, wie etwa
"Undefined function (*#()(!@# in ... ". Waehrend einiger Debuggin-Session bin ich dann ueber fehlerhaftes Verhalten in der Engine gestolpert (bei gtriggertem Bug). Beispiel

Code: Select all

	function &_SearchObject($SearchArray,$Pos=0)
	{
		
		$this->CheckBuildStatus();
		return parent::_SearchObject($SearchArray,$Pos);
	}
Obige methode erhaelt SearchArray als Array und gibt es, wie gewuenscht, ebenfalls als Array an die Methode der Elternklasse weitter.
In der aufegrufenen Method der Elternklasse ist der Parameter-Array dann mit dem Inhalt aus dem zweiten parameter gefuellt (in diesem Fall ein integer).


Kopiert man das Projekt auf eine Maschine mit PHP 4.3 lueppt alles perfekt. Initialisiert man die entsprechenden TMP-Variablen zu Beginn der Methoden mit irgendwas ($Var1=null oder $Var1=false)
laeuft auch unter PHP 4.2.3 alles super. Wie gesagt, es lief auch alles unter PHP 4.2.3 super, bis gestern ;-). Der Bug wird zudem durch Code getriggert, der nichts mit den Methoden zu tun hat, welche ihn eigentlich ausloesen. Wenn ich beispielsweise in der neuen Klasse eine Array-Eigenschaft mit Werten fuelle kommt es zu dem Bug. Wenn ich dies nicht tue, kommt es nicht zu dem Bug. In den Schwester-Klassen der neuen Klasse wird dieses Array genauso genutzt, diese Klassen rufen z.T. sogar die gleichen Funktionen/Methoden auf, und es kommt nicht zu dem Bug.
arty
Userprojekt
Userprojekt
Posts: 729
Joined: 2002-06-12 10:11

Re: Bug in PHP 4.2.3?

Post by arty »

Hi,

da der Bug mit 4.3.x gefixt ist, würde ich halt 4.3.x nutzen. :)
Ansonsten wäre es noch gut, wenn du den Bug auf http://bugs.php.net meldest!

bye
arty