diff --git a/src/PhpWord/Shared/Html.php b/src/PhpWord/Shared/Html.php index 15c5246a0c..7f93b2ebff 100644 --- a/src/PhpWord/Shared/Html.php +++ b/src/PhpWord/Shared/Html.php @@ -965,7 +965,10 @@ protected static function parseImage($node, $element) $tmpDir = Settings::getTempDir() . '/'; $match = []; preg_match('/.+\.(\w+)$/', $src, $match); - $src = $tmpDir . uniqid() . '.' . $match[1]; + $src = $tmpDir . uniqid(); + if (isset($match[1])) { + $src .= '.' . $match[1]; + } $ifp = fopen($src, 'wb'); diff --git a/tests/PhpWordTests/AbstractWebServerEmbeddedTest.php b/tests/PhpWordTests/AbstractWebServerEmbeddedTest.php index f291f79b8a..4671eac342 100644 --- a/tests/PhpWordTests/AbstractWebServerEmbeddedTest.php +++ b/tests/PhpWordTests/AbstractWebServerEmbeddedTest.php @@ -53,6 +53,15 @@ protected static function getRemoteImageUrl() return 'http://php.net/images/logos/new-php-logo.png'; } + protected static function getRemoteImageUrlWithoutExtension() + { + if (self::$httpServer) { + return self::getBaseUrl() . '/images/new-php-logo'; + } + + return 'http://placekitten.com/200/300'; + } + protected static function getRemoteGifImageUrl() { if (self::$httpServer) { diff --git a/tests/PhpWordTests/Shared/HtmlTest.php b/tests/PhpWordTests/Shared/HtmlTest.php index 6887c61829..d65066d54c 100644 --- a/tests/PhpWordTests/Shared/HtmlTest.php +++ b/tests/PhpWordTests/Shared/HtmlTest.php @@ -816,6 +816,24 @@ public function testParseRemoteImage(): void self::assertTrue($doc->elementExists($baseXpath . '/w:pict/v:shape')); } + /** + * Test parsing of remote img without extension. + */ + public function testParseRemoteImageWithoutExtension(): void + { + $src = self::getRemoteImageUrlWithoutExtension(); + + $phpWord = new PhpWord(); + $section = $phpWord->addSection(); + $html = '