diff --git a/image/imgLoader.cpp b/image/imgLoader.cpp index 764d397093d8..aac684d12753 100644 --- a/image/imgLoader.cpp +++ b/image/imgLoader.cpp @@ -2729,6 +2729,8 @@ imgLoader::GetMIMETypeFromContent(nsIRequest* aRequest, nsresult imgLoader::GetMimeTypeFromContent(const char* aContents, uint32_t aLength, nsACString& aContentType) { + nsAutoCString detected; + /* Is it a GIF? */ if (aLength >= 6 && (!strncmp(aContents, "GIF87a", 6) || !strncmp(aContents, "GIF89a", 6))) { @@ -2781,8 +2783,9 @@ nsresult imgLoader::GetMimeTypeFromContent(const char* aContents, aContentType.AssignLiteral(IMAGE_WEBP); } else if (MatchesMP4(reinterpret_cast(aContents), aLength, - aContentType)) { - MOZ_ASSERT(aContentType.Equals(IMAGE_AVIF)); + detected) && + detected.Equals(IMAGE_AVIF)) { + aContentType.AssignLiteral(IMAGE_AVIF); } else { /* none of the above? I give up */ return NS_ERROR_NOT_AVAILABLE; diff --git a/image/test/gtest/TestLoader.cpp b/image/test/gtest/TestLoader.cpp index 286be2e7a7f6..289cebae9c01 100644 --- a/image/test/gtest/TestLoader.cpp +++ b/image/test/gtest/TestLoader.cpp @@ -87,6 +87,16 @@ TEST_F(ImageLoader, DetectAVIFCompatibleBrand) { CheckMimeType(buffer, sizeof(buffer), IMAGE_AVIF); } +TEST_F(ImageLoader, DetectNonImageMP4) { + const char buffer[] = + "\x00\x00\x00\x1c" // box length + "ftyp" // box type + "isom" // major brand + "\x00\x00\x02\x00" // minor version + "isomiso2mp41"; // compatible brands + CheckMimeType(buffer, sizeof(buffer), nullptr); +} + TEST_F(ImageLoader, DetectNone) { const char buffer[] = "abcdefghijklmnop"; CheckMimeType(buffer, sizeof(buffer), nullptr);