Unbreaking ownCloud – php-7.0.6

Fix nicht mehr nötig mit OwnCloud 9.0.2!

Ich weiß nicht, wo ich heute beginnen soll – aber ich denke, ich halte es wie bei den guten, alten Bug Reports und erzähle von Anfang an:

Wir beginnen mit ownCloud 9.0.1 auf einem PHP 7.0.5 Host, welcher einen kleinen Redis Server im Hintergrund als Cache und eine extern lebende Datenbank hat. Also nichts was jetzt sonderlich aufregend ist und den Stress hier rechtfertigen würde. Doch dann kam ein ’schnelles‘ PHP Update auf 7.0.6, ein Restart des Apache und dann war’s das mit der ownCloud, da der Login nicht mehr möglich war.

Natürlich war mein erster Verdächtiger die selbst gebaute und gepatchte phpRedis Erweiterung, also habe ich diese aus der Config geworfen, was das Problem nicht löste. Also ging’s ans Debuggen, nachdem ein Downgrade von PHP das Ding wieder ans Laufen brachte.

Nach einigem Lesen und recherchieren im Code war es die Funktion __isset(), die nicht so ganz tat was sie sollte:

lib/private/appframework/http/request.php

 /**
* @param string $name
* @return bool
*/
public function __isset($name) {
return isset($this->items['parameters'][$name]);
}

Der entscheidende Hinweis bzw die Bestätigung fand sich im Changelog von PHP und ich musste mir Gedanken um einen Fix machen. Am Ende kam dann eine kleine Erweiterung der oben stehenden Funktion heraus, die wie folgt aussieht:

/**
* @param string $name
* @return bool
*/
public function __isset($name) {
if (in_array($name, $this->allowedKeys, true)) {
return true;
}
return isset($this->items['parameters'][$name]);
}

Das ist jetzt nicht sehr schön, funktioniert aber.

Author:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert