From 393baa761cce3768fce1f30a14629a2af6e63d19 Mon Sep 17 00:00:00 2001 From: Dave Long <dave@longwaveconsulting.com> Date: Tue, 10 Dec 2024 21:22:40 +0000 Subject: [PATCH] Issue #3487488 by kim.pepper, mondrake, dakwamine, smustgrave: ExtensionMimeTypeGuesser::guessMimeType must support file names with "0" (zero) in the extension parts like foo.0.zip --- .../Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php | 4 +++- core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php b/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php index 70ee07a1ebe0..4ed1bb82d7d4 100644 --- a/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php +++ b/core/lib/Drupal/Core/File/MimeType/ExtensionMimeTypeGuesser.php @@ -915,7 +915,9 @@ public function guessMimeType($path): ?string { // then iterate over the file parts, trying to find a match. // For 'my.awesome.image.jpeg', we try: 'awesome.image.jpeg', then // 'image.jpeg', then 'jpeg'. - while (array_shift($file_parts)) { + // We explicitly check for NULL because that indicates that the array is + // empty. + while (array_shift($file_parts) !== NULL) { $extension = strtolower(implode('.', $file_parts)); if (isset($this->mapping['extensions'][$extension])) { return $this->mapping['mimetypes'][$this->mapping['extensions'][$extension]]; diff --git a/core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php b/core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php index 9136dfeede29..653902e9f58c 100644 --- a/core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php +++ b/core/tests/Drupal/KernelTests/Core/File/MimeTypeTest.php @@ -44,6 +44,8 @@ public function testFileMimeTypeDetection(): void { 'foobar.z' => 'application/x-compress', 'foobar.tar' => 'application/x-tar', 'foobar.tar.z' => 'application/x-tarz', + 'foobar.0.zip' => 'application/zip', + 'foobar..zip' => 'application/zip', ]; $guesser = $this->container->get('file.mime_type.guesser'); -- GitLab