mozilla-bmo1573381.patch
author Wolfgang Rosenauer <wr@rosenauer.org>
Thu, 05 Sep 2019 08:27:52 +0200
branchfirefox69
changeset 1105 611baabe5b83
parent 1101 a4709640638e
permissions -rw-r--r--
new merge

# HG changeset patch
# Parent  45680ce4ca06795cbca1ea5a9ae8a7a11ab95cf1
The code tries to find a codec in a list of codecs. For this it searches for a given prefix.
But the prefix is of type char16_t, which means 2 bytes per character instead of 1, as was compared here.
On big endian this created some false positives, as the order of bytes is different and some characters only
occupy "the first" byte, having the second null'ed out.
Noticed because of gtest: MediaMIMETypes.MediaCodecs

Upstream bugreport: https://bugzilla.mozilla.org/show_bug.cgi?id=1573381

diff -r 45680ce4ca06 -r 381102061fcc dom/media/MediaMIMETypes.cpp
--- a/dom/media/MediaMIMETypes.cpp	Mon Aug 05 09:28:53 2019 +0200
+++ b/dom/media/MediaMIMETypes.cpp	Tue Aug 13 07:51:27 2019 +0200
@@ -87,7 +87,7 @@
   const size_t prefixLength = aCodecPrefix.Length();
   for (const auto& myCodec : Range()) {
     if (myCodec.Length() >= prefixLength &&
-        memcmp(myCodec.Data(), aCodecPrefix.Data(), prefixLength) == 0) {
+        memcmp(myCodec.Data(), aCodecPrefix.Data(), prefixLength * sizeof(char16_t)) == 0) {
       return true;
     }
   }