Skip to content

Commit d5b64c1

Browse files
trejjamdg
authored andcommitted
Loader: add includes recursive limitation [Closes #164][Closes #162]
1 parent 8eb9072 commit d5b64c1

File tree

3 files changed

+31
-1
lines changed

3 files changed

+31
-1
lines changed

src/DI/Config/Loader.php

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ class Loader
3030

3131
private $dependencies = [];
3232

33+
private $loadedFiles = [];
34+
3335

3436
/**
3537
* Reads configuration from file.
@@ -39,6 +41,12 @@ public function load(string $file): array
3941
if (!is_file($file) || !is_readable($file)) {
4042
throw new Nette\FileNotFoundException("File '$file' is missing or is not readable.");
4143
}
44+
45+
if (isset($this->loadedFiles[$file])) {
46+
throw new Nette\InvalidStateException("Recursive included file '$file'");
47+
}
48+
$this->loadedFiles[$file] = true;
49+
4250
$this->dependencies[] = $file;
4351
$data = $this->getAdapter($file)->load($file);
4452

@@ -52,7 +60,8 @@ public function load(string $file): array
5260
$merged = Helpers::merge($this->load($include), $merged);
5361
}
5462
}
55-
unset($data[self::INCLUDES_KEY]);
63+
unset($data[self::INCLUDES_KEY], $this->loadedFiles[$file]);
64+
5665

5766
return Helpers::merge($data, $merged);
5867
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?php
2+
3+
/**
4+
* Test: Nette\DI\Config\Loader max includes nesting.
5+
*/
6+
7+
declare(strict_types=1);
8+
9+
use Nette\DI;
10+
use Tester\Assert;
11+
12+
13+
require __DIR__ . '/../bootstrap.php';
14+
15+
$compiler = new DI\Config\Loader();
16+
17+
Assert::exception(function () use ($compiler) {
18+
$compiler->load('files/loader.recursiveInclude.neon');
19+
}, \Nette\InvalidStateException::class, "Recursive included file 'files/loader.recursiveInclude.neon'");
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
includes:
2+
- loader.recursiveInclude.neon

0 commit comments

Comments
 (0)