2 declare(strict_types = 1);
18 use org\bovigo\vfs\vfsStream;
19 use org\bovigo\vfs\vfsStreamDirectory;
23 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
37 protected function setUp(): void
46 $this->vfs = vfsStream::setup(
'root',
null, $structure);
47 $this->directory = vfsStream::url(
'root/typo3conf/ext');
53 unset($this->vfs, $this->directory);
61 $extensionDirectory = $this->directory .
'/malicious';
62 GeneralUtility::mkdir($extensionDirectory);
64 (
new ZipService())->extract(
65 __DIR__ .
'/Fixtures/malicious.zip',
68 self::assertFileNotExists($extensionDirectory .
'/../tool.php');
69 self::assertFileExists($extensionDirectory .
'/tool.php');
71 self::assertFileExists($extensionDirectory .
'/passwd');
72 self::assertFalse(is_link($extensionDirectory .
'/passwd'));
80 $extensionDirectory = $this->directory .
'/my_extension';
81 GeneralUtility::mkdir($extensionDirectory);
83 (
new ZipService())->extract(
84 __DIR__ .
'/Fixtures/my_extension.zip',
88 self::assertDirectoryExists($extensionDirectory .
'/Classes');
89 self::assertFileExists($extensionDirectory .
'/Resources/Public/Css/empty.css');
90 self::assertFileExists($extensionDirectory .
'/ext_emconf.php');
98 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'fileCreateMask'] =
'0777';
99 $GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'folderCreateMask'] =
'0772';
100 $extensionDirectory = $this->directory .
'/my_extension';
101 GeneralUtility::mkdir($extensionDirectory);
103 (
new ZipService())->extract(
104 __DIR__ .
'/Fixtures/my_extension.zip',
108 self::assertDirectoryExists($extensionDirectory .
'/Classes');
109 self::assertFileExists($extensionDirectory .
'/Resources/Public/Css/empty.css');
110 self::assertFileExists($extensionDirectory .
'/ext_emconf.php');
112 $filePerms = fileperms($extensionDirectory .
'/Resources/Public/Css/empty.css');
113 $folderPerms = fileperms($extensionDirectory .
'/Classes');
114 self::assertEquals(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'fileCreateMask'], substr(sprintf(
'%o', $filePerms), -4));
115 self::assertEquals(
$GLOBALS[
'TYPO3_CONF_VARS'][
'SYS'][
'folderCreateMask'], substr(sprintf(
'%o', $folderPerms), -4));
123 $this->expectException(ExtractException::class);
124 $this->expectExceptionCode(1565709712);
126 (
new ZipService())->extract(
128 vfsStream::url(
'root')
137 $this->expectException(\RuntimeException::class);
138 $this->expectExceptionCode(1565773005);
140 (
new ZipService())->extract(
141 __DIR__ .
'/Fixtures/my_extension.zip',
142 vfsStream::url(
'root/non-existent-directory')
151 $this->expectException(\RuntimeException::class);
152 $this->expectExceptionCode(1565773006);
154 $extensionDirectory = $this->directory .
'/my_extension';
155 GeneralUtility::mkdir($extensionDirectory);
156 chmod($extensionDirectory, 0000);
158 (
new ZipService())->extract(
159 __DIR__ .
'/Fixtures/my_extension.zip',
162 self::assertFileExists($extensionDirectory .
'/Resources/Public/Css/empty.css');
171 (
new ZipService())->verify(__DIR__ .
'/Fixtures/my_extension.zip')
180 $this->expectException(ExtractException::class);
181 $this->expectExceptionCode(1565709714);
183 (
new ZipService())->verify(__DIR__ .
'/Fixtures/malicious.zip');