Skip to content

Commit ddd057e

Browse files
committed
XmlWriter Vulnerability
See issue PHPOffice#2081. This will need to be redone for Php8.5.
1 parent 2590555 commit ddd057e

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

samples/Sample_47_RTLTitles.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
// Define styles for headers
1919
$phpWord->addTitleStyle(1, ['bold' => true, 'name' => 'Arial', 'size' => 16], []);
20-
//var_dump($x);
2120
$phpWord->addTitleStyle(2, ['bold' => true, 'name' => 'Arial', 'size' => 14], []);
2221
$phpWord->addTitleStyle(3, ['bold' => true, 'name' => 'Arial', 'size' => 12], []);
2322
$phpWord->addTitleStyle(4, ['bold' => true, 'name' => 'Arial', 'size' => 10], []);

src/PhpWord/Shared/XMLWriter.php

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818

1919
namespace PhpOffice\PhpWord\Shared;
2020

21-
use Exception;
21+
use PhpOffice\PhpWord\Exception\Exception as WordException;
2222

2323
/**
2424
* XMLWriter.
@@ -90,9 +90,14 @@ public function __destruct()
9090
if (empty($this->tempFileName)) {
9191
return;
9292
}
93-
if (PHP_OS != 'WINNT' && @unlink($this->tempFileName) === false) {
94-
throw new Exception('The file ' . $this->tempFileName . ' could not be deleted.');
95-
}
93+
@unlink($this->tempFileName);
94+
}
95+
96+
public function __wakeup(): void
97+
{
98+
$this->tempFileName = '';
99+
100+
throw new WordException('Unserialize not permitted');
96101
}
97102

98103
/**

tests/PhpWordTests/Shared/XMLWriterTest.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
namespace PhpOffice\PhpWordTests\Shared;
2020

21+
use PhpOffice\PhpWord\Exception\Exception as WordException;
2122
use PhpOffice\PhpWord\Shared\XMLWriter;
2223

2324
/**
@@ -71,4 +72,12 @@ public function testWriteAttributeShouldWriteFloatValueLocaleIndependent(): void
7172

7273
setlocale(LC_NUMERIC, $currentLocale);
7374
}
75+
76+
public function testNoUnserialize(): void
77+
{
78+
$this->expectException(WordException::class);
79+
$this->expectExceptionMessage('Unserialize not permitted');
80+
$xmlWriter = new XMLWriter();
81+
unserialize(serialize($xmlWriter));
82+
}
7483
}

0 commit comments

Comments
 (0)