diff --git a/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php b/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php index b01746cfc..42224df39 100644 --- a/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php +++ b/src/PhpSpreadsheet/Writer/Xlsx/ContentTypes.php @@ -196,7 +196,7 @@ class ContentTypes extends WriterPart $bgImage = $spreadsheet->getSheet($i)->getBackgroundImage(); $mimeType = $spreadsheet->getSheet($i)->getBackgroundMime(); $extension = $spreadsheet->getSheet($i)->getBackgroundExtension(); - if ($bgImage !== '' && !isset($aMediaContentTypes[$mimeType])) { + if ($bgImage !== '' && !isset($aMediaContentTypes[$extension])) { $this->writeDefaultContentType($objWriter, $extension, $mimeType); } } diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFunctionsTest.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFunctionsTest.php index 630993206..2ddd31733 100644 --- a/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFunctionsTest.php +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/ArrayFunctionsTest.php @@ -15,6 +15,14 @@ class ArrayFunctionsTest extends TestCase { private string $outputFile = ''; + protected function tearDown(): void + { + if ($this->outputFile !== '') { + unlink($this->outputFile); + $this->outputFile = ''; + } + } + public function testArrayOutput(): void { $spreadsheet = new Spreadsheet(); diff --git a/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue4179Test.php b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue4179Test.php new file mode 100644 index 000000000..c6f5ea25c --- /dev/null +++ b/tests/PhpSpreadsheetTests/Writer/Xlsx/Issue4179Test.php @@ -0,0 +1,62 @@ +outputFile !== '') { + unlink($this->outputFile); + $this->outputFile = ''; + } + } + + public function testIssue4179(): void + { + // duplicate entry in ContentTypes + $spreadsheet = new Spreadsheet(); + $sheet = $spreadsheet->getActiveSheet(); + $imageFile = 'tests/data/Writer/XLSX/backgroundtest.png'; + $image = (string) file_get_contents($imageFile); + $sheet->setBackgroundImage($image); + $drawing = new Drawing(); + $drawing->setName('Blue Square'); + $drawing->setPath('tests/data/Writer/XLSX/blue_square.png'); + $drawing->setCoordinates('A1'); + $drawing->setWorksheet($sheet); + $writer = new XlsxWriter($spreadsheet); + $this->outputFile = File::temporaryFilename(); + $writer->save($this->outputFile); + $spreadsheet->disconnectWorksheets(); + + $zip = new ZipArchive(); + $open = $zip->open($this->outputFile, ZipArchive::RDONLY); + $pngCount = 0; + if ($open !== true) { + self::fail("zip open failed for {$this->outputFile}"); + } else { + $contents = (string) $zip->getFromName('[Content_Types].xml'); + $subCount = substr_count($contents, '"png"'); + self::assertSame(1, $subCount); + for ($i = 0; $i < $zip->numFiles; ++$i) { + $filename = (string) $zip->getNameIndex($i); + if (preg_match('~^xl/media/\\w+[.]png$~', $filename) === 1) { + ++$pngCount; + } + } + } + self::assertSame(2, $pngCount); + } +}