Skip to content
This repository was archived by the owner on Nov 25, 2020. It is now read-only.

Commit 8529fae

Browse files
committed
Do not load a repository that has a parentId pointing to a non-existing repo. Log an error instead.
Do not store reference to this->parentTemplateObject, it can end up storing a null reference in the $_SESSION array.
1 parent 572ff4e commit 8529fae

File tree

2 files changed

+16
-9
lines changed

2 files changed

+16
-9
lines changed

core/src/core/classes/class.ConfService.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -833,6 +833,10 @@ protected function initRepositoriesListInst($scope = "user", $includeShared = tr
833833
$repoObject->setId($repoId);
834834
$drvList[$repoId] = $repoObject;
835835
}
836+
if($repoObject->hasParent() && !ConfService::findRepositoryByIdOrAlias($repoObject->getParentId())){
837+
AJXP_Logger::error(__CLASS__, __FUNCTION__, "Disabling repository ".$repoObject->getSlug()." as parent cannot be correctly loaded.");
838+
unset($drvList[$repoId]);
839+
}
836840
}
837841
foreach($drvList as $key => $value){
838842
$objList[$key] = $value;

core/src/core/classes/class.Repository.php

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -324,12 +324,15 @@ public function addOption($oName, $oValue)
324324
*/
325325
public function getOption($oName, $safe=false, $resolveUser = null)
326326
{
327-
if (!$safe && $this->inferOptionsFromParent) {
328-
if (!isset($this->parentTemplateObject) || !is_a($this->parentTemplateObject, "Repository")) {
329-
$this->parentTemplateObject = ConfService::getRepositoryById($this->parentId);
327+
if(isSet($this->inferOptionsFromParent) && isSet($this->parentId)){
328+
$parentTemplateObject = ConfService::getRepositoryById($this->parentId);
329+
if(empty($parentTemplateObject) || !is_a($parentTemplateObject, "Repository")) {
330+
throw new Exception("Option should be loaded from parent repository, but it was not found");
330331
}
331-
if (isSet($this->parentTemplateObject)) {
332-
$value = $this->parentTemplateObject->getOption($oName, $safe);
332+
}
333+
if (!$safe && $this->inferOptionsFromParent) {
334+
if (isSet($parentTemplateObject)) {
335+
$value = $parentTemplateObject->getOption($oName, $safe);
333336
if (is_string($value) && strstr($value, "AJXP_ALLOW_SUB_PATH") !== false) {
334337
$val = rtrim(str_replace("AJXP_ALLOW_SUB_PATH", "", $value), "/")."/".$this->options[$oName];
335338
return AJXP_Utils::securePath($val);
@@ -342,11 +345,11 @@ public function getOption($oName, $safe=false, $resolveUser = null)
342345
return $value;
343346
}
344347
if ($this->inferOptionsFromParent) {
345-
if (!isset($this->parentTemplateObject)) {
346-
$this->parentTemplateObject = ConfService::getRepositoryById($this->parentId);
348+
if (!isset($parentTemplateObject)) {
349+
$parentTemplateObject = ConfService::getRepositoryById($this->parentId);
347350
}
348-
if (isSet($this->parentTemplateObject)) {
349-
return $this->parentTemplateObject->getOption($oName, $safe);
351+
if (isSet($parentTemplateObject)) {
352+
return $parentTemplateObject->getOption($oName, $safe);
350353
}
351354
}
352355
return "";

0 commit comments

Comments
 (0)