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