- Mozilla Thunderbird 68.2.0

* Message Display WebExtension API
  * Message Search WebExtension API
  * Better visual feedback for unread messages when using the dark theme
  * Fixed various issues when editing mailing list
  * Fixed application windows not maintaining their size after restart
  MFSA 2019-33 (bsc#1154738)
  * CVE-2019-15903 (bmo#1584907)
    Heap overflow in expat library in XML_GetCurrentLineNumber
  * CVE-2019-11757 (bmo#1577107)
    Use-after-free when creating index updates in IndexedDB
  * CVE-2019-11758 (bmo#1536227)
    Potentially exploitable crash due to 360 Total Security
  * CVE-2019-11759 (bmo#1577953)
    Stack buffer overflow in HKDF output
  * CVE-2019-11760 (bmo#1577719)
    Stack buffer overflow in WebRTC networking
  * CVE-2019-11761 (bmo#1561502)
    Unintended access to a privileged JSONView object
  * CVE-2019-11762 (bmo#1582857)
    document.domain-based origin isolation has same-origin-property violation
  * CVE-2019-11763 (bmo#1584216)
    Incorrect HTML parsing results in XSS bypass technique
  * CVE-2019-11764 (bmo#1558522, bmo#1577061, bmo#1548044, bmo#1571223,
    bmo#1573048, bmo#1578933, bmo#1575217, bmo#1583684, bmo#1586845,
    bmo#1581950, bmo#1583463, bmo#1586599)
    Memory safety bugs fixed in Firefox 70 and Firefox ESR 68.2
- removed obsolete patches
    mozilla-bmo1573381.patch
    mozilla-bmo1512162.patch

OBS-URL: https://build.opensuse.org/package/show/mozilla:Factory/MozillaThunderbird?expand=0&rev=499
This commit is contained in:
Wolfgang Rosenauer 2019-10-23 13:33:15 +00:00 committed by Git OBS Bridge
parent 1fd97561e6
commit 6fd5201f1c
13 changed files with 64 additions and 4692 deletions

View File

@ -1,3 +1,38 @@
-------------------------------------------------------------------
Tue Oct 22 06:43:32 UTC 2019 - Wolfgang Rosenauer <wr@rosenauer.org>
- Mozilla Thunderbird 68.2.0
* Message Display WebExtension API
* Message Search WebExtension API
* Better visual feedback for unread messages when using the dark theme
* Fixed various issues when editing mailing list
* Fixed application windows not maintaining their size after restart
MFSA 2019-33 (bsc#1154738)
* CVE-2019-15903 (bmo#1584907)
Heap overflow in expat library in XML_GetCurrentLineNumber
* CVE-2019-11757 (bmo#1577107)
Use-after-free when creating index updates in IndexedDB
* CVE-2019-11758 (bmo#1536227)
Potentially exploitable crash due to 360 Total Security
* CVE-2019-11759 (bmo#1577953)
Stack buffer overflow in HKDF output
* CVE-2019-11760 (bmo#1577719)
Stack buffer overflow in WebRTC networking
* CVE-2019-11761 (bmo#1561502)
Unintended access to a privileged JSONView object
* CVE-2019-11762 (bmo#1582857)
document.domain-based origin isolation has same-origin-property violation
* CVE-2019-11763 (bmo#1584216)
Incorrect HTML parsing results in XSS bypass technique
* CVE-2019-11764 (bmo#1558522, bmo#1577061, bmo#1548044, bmo#1571223,
bmo#1573048, bmo#1578933, bmo#1575217, bmo#1583684, bmo#1586845,
bmo#1581950, bmo#1583463, bmo#1586599)
Memory safety bugs fixed in Firefox 70 and Firefox ESR 68.2
- removed obsolete patches
mozilla-bmo1573381.patch
mozilla-bmo1512162.patch
mozilla-bmo1585099.patch
-------------------------------------------------------------------
Thu Oct 10 14:30:09 UTC 2019 - Wolfgang Rosenauer <wr@rosenauer.org>

View File

@ -26,11 +26,11 @@
# major 69
# mainver %major.99
%define major 68
%define mainver %major.1.2
%define orig_version 68.1.2
%define mainver %major.2.0
%define orig_version 68.2.0
%define orig_suffix %{nil}
%define update_channel release
%define releasedate 20191008153335
%define releasedate 20191021120853
%define source_prefix thunderbird-%{mainver}
# always build with GCC as SUSE Security Team requires that
@ -165,16 +165,13 @@ Patch12: mozilla-reduce-rust-debuginfo.patch
Patch13: mozilla-ppc-altivec_static_inline.patch
Patch14: mozilla-bmo1005535.patch
Patch15: mozilla-bmo1568145.patch
Patch16: mozilla-bmo1573381.patch
Patch17: mozilla-bmo1504834-part1.patch
Patch18: mozilla-bmo1504834-part2.patch
Patch19: mozilla-bmo1504834-part3.patch
Patch20: mozilla-bmo1511604.patch
Patch21: mozilla-bmo1554971.patch
Patch22: mozilla-nestegg-big-endian.patch
Patch23: mozilla-bmo1512162.patch
Patch24: mozilla-fix-top-level-asm.patch
Patch25: mozilla-bmo1585099.patch
Patch100: thunderbird-broken-locales-build.patch
%endif # only_print_mozconfig
BuildRoot: %{_tmppath}/%{name}-%{version}-build
@ -263,16 +260,13 @@ fi
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
# Thunderbird
%patch100 -p1
%endif # only_print_mozconfig

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:f8e19a20a0b98e6b292a598734238128270cfb4019eee6f65ed6c9a9dbbc91d6
size 28540
oid sha256:63a4c686c9852414b6d1836323c637c7b1dd575b1e65f5318435733ecbbfa06d
size 28492

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:6878eb1036174dc95be285d7851eeb6848fbb3a3753704df5624b317cbde2b5b
size 28453140

3
l10n-68.2.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c2362f799eb1dcab395e49b4d70ac230112baa1a5a2423a70c48fc02536c27ce
size 28462168

View File

@ -1,502 +0,0 @@
# HG changeset patch
# Parent d4ba07ab572268a34e98c63792beb2ce6d78e7a1
This patch is upstream
diff -r d4ba07ab5722 js/xpconnect/src/XPCWrappedNative.cpp
--- a/js/xpconnect/src/XPCWrappedNative.cpp Fri Sep 20 07:56:01 2019 +0200
+++ b/js/xpconnect/src/XPCWrappedNative.cpp Fri Sep 20 08:00:19 2019 +0200
@@ -1157,10 +1157,6 @@
return helper.get().Call();
}
-#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-// Work around a compiler bug on ppc64le (bug 1512162).
-__attribute__ ((noinline,noclone))
-#endif
bool CallMethodHelper::Call() {
mCallContext.SetRetVal(JS::UndefinedValue());
@@ -1319,10 +1315,6 @@
return true;
}
-#if (__GNUC__ && __linux__ && __PPC64__ && _LITTLE_ENDIAN)
-// Work around a compiler bug on ppc64le (bug 1512162).
-__attribute__ ((noinline,noclone))
-#endif
bool CallMethodHelper::GatherAndConvertResults() {
// now we iterate through the native params to gather and convert results
uint8_t paramCount = mMethodInfo->GetParamCount();
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S
--- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S Fri Sep 20 07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcinvoke_asm_ppc64_linux.S Fri Sep 20 08:00:19 2019 +0200
@@ -151,10 +151,10 @@
ld r2,STACK_TOC(r1) # Load our own TOC pointer
ld r1,0(r1) # Revert stack frame
ld 0,16(r1) # Reload lr
+ mtlr 0
ld 29,-24(r1) # Restore NVGPRS
ld 30,-16(r1)
ld 31,-8(r1)
- mtlr 0
blr
#if _CALL_ELF == 2
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp
--- a/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp Fri Sep 20 07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcinvoke_ppc64_linux.cpp Fri Sep 20 08:00:19 2019 +0200
@@ -5,93 +5,126 @@
// Platform specific code to invoke XPCOM methods on native objects
+#include "xptcprivate.h"
+
// The purpose of NS_InvokeByIndex() is to map a platform
// independent call to the platform ABI. To do that,
// NS_InvokeByIndex() has to determine the method to call via vtable
// access. The parameters for the method are read from the
// nsXPTCVariant* and prepared for the native ABI.
-
-// The PowerPC64 platform ABI can be found here:
-// http://www.freestandards.org/spec/ELF/ppc64/
+//
+// Prior to POWER8, all 64-bit Power ISA systems used ELF v1 ABI, found
+// here:
+// https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html
// and in particular:
-// http://www.freestandards.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-CALL
-
-#include <stdio.h>
-#include "xptcprivate.h"
+// https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#FUNC-CALL
+// Little-endian ppc64le, however, uses ELF v2 ABI, which is here:
+// http://openpowerfoundation.org/wp-content/uploads/resources/leabi/leabi-20170510.pdf
+// and in particular section 2.2, page 22. However, most big-endian ppc64
+// systems still use ELF v1, so this file should support both.
-// 8 integral parameters are passed in registers, not including 'that'
-#define GPR_COUNT 7
+// 7 integral parameters are passed in registers, not including |this|
+// (i.e., r3-r10, with r3 being |this|).
+const uint32_t GPR_COUNT = 7;
-// 8 floating point parameters are passed in registers, floats are
-// promoted to doubles when passed in registers
-#define FPR_COUNT 13
-
-extern "C" uint32_t
-invoke_count_words(uint32_t paramCount, nsXPTCVariant* s)
-{
- return uint32_t(((paramCount * 2) + 3) & ~3);
-}
+// 13 floating point parameters are passed in registers, either single or
+// double precision (i.e., f1-f13).
+const uint32_t FPR_COUNT = 13;
-extern "C" void
-invoke_copy_to_stack(uint64_t* gpregs,
- double* fpregs,
- uint32_t paramCount,
- nsXPTCVariant* s,
- uint64_t* d)
+// Both ABIs use the same register assignment strategy, as per this
+// example from V1 ABI section 3.2.3 and V2 ABI section 2.2.3.2 [page 43]:
+//
+// typedef struct {
+// int a;
+// double dd;
+// } sparm;
+// sparm s, t;
+// int c, d, e;
+// long double ld;
+// double ff, gg, hh;
+//
+// x = func(c, ff, d, ld, s, gg, t, e, hh);
+//
+// Parameter Register Offset in parameter save area
+// c r3 0-7 (not stored in parameter save area)
+// ff f1 8-15 (not stored)
+// d r5 16-23 (not stored)
+// ld f2,f3 24-39 (not stored)
+// s r8,r9 40-55 (not stored)
+// gg f4 56-63 (not stored)
+// t (none) 64-79 (stored in parameter save area)
+// e (none) 80-87 (stored)
+// hh f5 88-95 (not stored)
+//
+// i.e., each successive FPR usage skips a GPR, but not the other way around.
+
+extern "C" void invoke_copy_to_stack(uint64_t* gpregs, double* fpregs,
+ uint32_t paramCount, nsXPTCVariant* s,
+ uint64_t* d)
{
- uint64_t tempu64;
+ uint32_t nr_gpr = 0u;
+ uint32_t nr_fpr = 0u;
+ uint64_t value = 0u;
- for(uint32_t i = 0; i < paramCount; i++, s++) {
- if(s->IsIndirect())
- tempu64 = (uint64_t) &s->val;
+ for (uint32_t i = 0; i < paramCount; i++, s++) {
+ if (s->IsIndirect())
+ value = (uint64_t) &s->val;
else {
- switch(s->type) {
- case nsXPTType::T_FLOAT: break;
- case nsXPTType::T_DOUBLE: break;
- case nsXPTType::T_I8: tempu64 = s->val.i8; break;
- case nsXPTType::T_I16: tempu64 = s->val.i16; break;
- case nsXPTType::T_I32: tempu64 = s->val.i32; break;
- case nsXPTType::T_I64: tempu64 = s->val.i64; break;
- case nsXPTType::T_U8: tempu64 = s->val.u8; break;
- case nsXPTType::T_U16: tempu64 = s->val.u16; break;
- case nsXPTType::T_U32: tempu64 = s->val.u32; break;
- case nsXPTType::T_U64: tempu64 = s->val.u64; break;
- case nsXPTType::T_BOOL: tempu64 = s->val.b; break;
- case nsXPTType::T_CHAR: tempu64 = s->val.c; break;
- case nsXPTType::T_WCHAR: tempu64 = s->val.wc; break;
- default: tempu64 = (uint64_t) s->val.p; break;
+ switch (s->type) {
+ case nsXPTType::T_FLOAT: break;
+ case nsXPTType::T_DOUBLE: break;
+ case nsXPTType::T_I8: value = s->val.i8; break;
+ case nsXPTType::T_I16: value = s->val.i16; break;
+ case nsXPTType::T_I32: value = s->val.i32; break;
+ case nsXPTType::T_I64: value = s->val.i64; break;
+ case nsXPTType::T_U8: value = s->val.u8; break;
+ case nsXPTType::T_U16: value = s->val.u16; break;
+ case nsXPTType::T_U32: value = s->val.u32; break;
+ case nsXPTType::T_U64: value = s->val.u64; break;
+ case nsXPTType::T_BOOL: value = s->val.b; break;
+ case nsXPTType::T_CHAR: value = s->val.c; break;
+ case nsXPTType::T_WCHAR: value = s->val.wc; break;
+ default: value = (uint64_t) s->val.p; break;
}
}
if (!s->IsIndirect() && s->type == nsXPTType::T_DOUBLE) {
- if (i < FPR_COUNT)
- fpregs[i] = s->val.d;
- else
- *(double *)d = s->val.d;
+ if (nr_fpr < FPR_COUNT) {
+ fpregs[nr_fpr++] = s->val.d;
+ nr_gpr++;
+ } else {
+ *((double *)d) = s->val.d;
+ d++;
+ }
}
else if (!s->IsIndirect() && s->type == nsXPTType::T_FLOAT) {
- if (i < FPR_COUNT) {
- fpregs[i] = s->val.f; // if passed in registers, floats are promoted to doubles
+ if (nr_fpr < FPR_COUNT) {
+ // Single-precision floats are passed in FPRs too.
+ fpregs[nr_fpr++] = s->val.f;
+ nr_gpr++;
} else {
- float *p = (float *)d;
-#ifndef __LITTLE_ENDIAN__
+#ifdef __LITTLE_ENDIAN__
+ *((float *)d) = s->val.f;
+#else
+ // Big endian needs adjustment to point to the least
+ // significant word.
+ float* p = (float*)d;
p++;
+ *p = s->val.f;
#endif
- *p = s->val.f;
+ d++;
}
}
else {
- if (i < GPR_COUNT)
- gpregs[i] = tempu64;
- else
- *d = tempu64;
+ if (nr_gpr < GPR_COUNT) {
+ gpregs[nr_gpr++] = value;
+ } else {
+ *d++ = value;
+ }
}
- if (i >= 7)
- d++;
}
}
EXPORT_XPCOM_API(nsresult)
-NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
- uint32_t paramCount, nsXPTCVariant* params);
-
+NS_InvokeByIndex(nsISupports* that, uint32_t methodIndex, uint32_t paramCount,
+ nsXPTCVariant* params);
diff -r d4ba07ab5722 xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp
--- a/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp Fri Sep 20 07:56:01 2019 +0200
+++ b/xpcom/reflect/xptcall/md/unix/xptcstubs_ppc64_linux.cpp Fri Sep 20 08:00:19 2019 +0200
@@ -7,36 +7,64 @@
#include "xptcprivate.h"
-// The Linux/PPC64 ABI passes the first 8 integral
-// parameters and the first 13 floating point parameters in registers
-// (r3-r10 and f1-f13), no stack space is allocated for these by the
-// caller. The rest of the parameters are passed in the caller's stack
-// area. The stack pointer has to retain 16-byte alignment.
+// Prior to POWER8, all 64-bit Power ISA systems used ELF v1 ABI, found
+// here:
+// https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html
+// and in particular:
+// https://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi.html#FUNC-CALL
+// Little-endian ppc64le, however, uses ELF v2 ABI, which is here:
+// http://openpowerfoundation.org/wp-content/uploads/resources/leabi/leabi-20170510.pdf
+// and in particular section 2.2, page 22. However, most big-endian ppc64
+// systems still use ELF v1, so this file should support both.
+//
+// Both ABIs pass the first 8 integral parameters and the first 13 floating
+// point parameters in registers r3-r10 and f1-f13. No stack space is
+// allocated for these by the caller. The rest of the parameters are passed
+// in the caller's stack area. The stack pointer must stay 16-byte aligned.
-// The PowerPC64 platform ABI can be found here:
-// http://www.freestandards.org/spec/ELF/ppc64/
-// and in particular:
-// http://www.freestandards.org/spec/ELF/ppc64/PPC-elf64abi-1.9.html#FUNC-CALL
-
-#define PARAM_BUFFER_COUNT 16
-#define GPR_COUNT 7
-#define FPR_COUNT 13
+const uint32_t PARAM_BUFFER_COUNT = 16;
+const uint32_t GPR_COUNT = 7;
+const uint32_t FPR_COUNT = 13;
// PrepareAndDispatch() is called by SharedStub() and calls the actual method.
//
// - 'args[]' contains the arguments passed on stack
-// - 'gprData[]' contains the arguments passed in integer registers
-// - 'fprData[]' contains the arguments passed in floating point registers
+// - 'gpregs[]' contains the arguments passed in integer registers
+// - 'fpregs[]' contains the arguments passed in floating point registers
//
// The parameters are mapped into an array of type 'nsXPTCMiniVariant'
// and then the method gets called.
-#include <stdio.h>
+//
+// Both ABIs use the same register assignment strategy, as per this
+// example from V1 ABI section 3.2.3 and V2 ABI section 2.2.3.2 [page 43]:
+//
+// typedef struct {
+// int a;
+// double dd;
+// } sparm;
+// sparm s, t;
+// int c, d, e;
+// long double ld;
+// double ff, gg, hh;
+//
+// x = func(c, ff, d, ld, s, gg, t, e, hh);
+//
+// Parameter Register Offset in parameter save area
+// c r3 0-7 (not stored in parameter save area)
+// ff f1 8-15 (not stored)
+// d r5 16-23 (not stored)
+// ld f2,f3 24-39 (not stored)
+// s r8,r9 40-55 (not stored)
+// gg f4 56-63 (not stored)
+// t (none) 64-79 (stored in parameter save area)
+// e (none) 80-87 (stored)
+// hh f5 88-95 (not stored)
+//
+// i.e., each successive FPR usage skips a GPR, but not the other way around.
+
extern "C" nsresult ATTRIBUTE_USED
-PrepareAndDispatch(nsXPTCStubBase* self,
- uint64_t methodIndex,
- uint64_t* args,
- uint64_t *gprData,
- double *fprData)
+PrepareAndDispatch(nsXPTCStubBase * self, uint32_t methodIndex,
+ uint64_t * args, uint64_t * gpregs, double *fpregs)
{
nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
nsXPTCMiniVariant* dispatchParams = nullptr;
@@ -48,7 +76,7 @@
self->mEntry->GetMethodInfo(uint16_t(methodIndex), &info);
NS_ASSERTION(info,"no method info");
- if (! info)
+ if (!info)
return NS_ERROR_UNEXPECTED;
paramCount = info->GetParamCount();
@@ -66,9 +94,11 @@
const uint8_t indexOfJSContext = info->IndexOfJSContext();
uint64_t* ap = args;
- uint32_t iCount = 0;
- uint32_t fpCount = 0;
- uint64_t tempu64;
+ // |that| is implicit in the calling convention; we really do start at the
+ // first GPR (as opposed to x86_64).
+ uint32_t nr_gpr = 0;
+ uint32_t nr_fpr = 0;
+ uint64_t value;
for(i = 0; i < paramCount; i++) {
const nsXPTParamInfo& param = info->GetParam(i);
@@ -76,67 +106,67 @@
nsXPTCMiniVariant* dp = &dispatchParams[i];
if (i == indexOfJSContext) {
- if (iCount < GPR_COUNT)
- iCount++;
+ if (nr_gpr < GPR_COUNT)
+ nr_gpr++;
else
ap++;
}
if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
- if (fpCount < FPR_COUNT) {
- dp->val.d = fprData[fpCount++];
- }
- else
- dp->val.d = *(double*) ap;
- } else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
- if (fpCount < FPR_COUNT) {
- dp->val.f = (float) fprData[fpCount++]; // in registers floats are passed as doubles
+ if (nr_fpr < FPR_COUNT) {
+ dp->val.d = fpregs[nr_fpr++];
+ nr_gpr++;
+ } else {
+ dp->val.d = *(double*)ap++;
}
- else {
- float *p = (float *)ap;
-#ifndef __LITTLE_ENDIAN__
+ continue;
+ }
+ if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
+ if (nr_fpr < FPR_COUNT) {
+ // Single-precision floats are passed in FPRs too.
+ dp->val.f = (float)fpregs[nr_fpr++];
+ nr_gpr++;
+ } else {
+#ifdef __LITTLE_ENDIAN__
+ dp->val.f = *(float*)ap++;
+#else
+ // Big endian needs adjustment to point to the least
+ // significant word.
+ float* p = (float*)ap;
p++;
-#endif
dp->val.f = *p;
+ ap++;
+#endif
}
- } else { /* integer type or pointer */
- if (iCount < GPR_COUNT)
- tempu64 = gprData[iCount];
- else
- tempu64 = *ap;
+ continue;
+ }
+ if (nr_gpr < GPR_COUNT)
+ value = gpregs[nr_gpr++];
+ else
+ value = *ap++;
- if (param.IsOut() || !type.IsArithmetic())
- dp->val.p = (void*) tempu64;
- else if (type == nsXPTType::T_I8)
- dp->val.i8 = (int8_t) tempu64;
- else if (type == nsXPTType::T_I16)
- dp->val.i16 = (int16_t) tempu64;
- else if (type == nsXPTType::T_I32)
- dp->val.i32 = (int32_t) tempu64;
- else if (type == nsXPTType::T_I64)
- dp->val.i64 = (int64_t) tempu64;
- else if (type == nsXPTType::T_U8)
- dp->val.u8 = (uint8_t) tempu64;
- else if (type == nsXPTType::T_U16)
- dp->val.u16 = (uint16_t) tempu64;
- else if (type == nsXPTType::T_U32)
- dp->val.u32 = (uint32_t) tempu64;
- else if (type == nsXPTType::T_U64)
- dp->val.u64 = (uint64_t) tempu64;
- else if (type == nsXPTType::T_BOOL)
- dp->val.b = (bool) tempu64;
- else if (type == nsXPTType::T_CHAR)
- dp->val.c = (char) tempu64;
- else if (type == nsXPTType::T_WCHAR)
- dp->val.wc = (wchar_t) tempu64;
- else
- NS_ERROR("bad type");
+ if (param.IsOut() || !type.IsArithmetic()) {
+ dp->val.p = (void*) value;
+ continue;
}
- if (iCount < GPR_COUNT)
- iCount++; // gprs are skipped for fp args, so this always needs inc
- else
- ap++;
+ switch (type) {
+ case nsXPTType::T_I8: dp->val.i8 = (int8_t) value; break;
+ case nsXPTType::T_I16: dp->val.i16 = (int16_t) value; break;
+ case nsXPTType::T_I32: dp->val.i32 = (int32_t) value; break;
+ case nsXPTType::T_I64: dp->val.i64 = (int64_t) value; break;
+ case nsXPTType::T_U8: dp->val.u8 = (uint8_t) value; break;
+ case nsXPTType::T_U16: dp->val.u16 = (uint16_t) value; break;
+ case nsXPTType::T_U32: dp->val.u32 = (uint32_t) value; break;
+ case nsXPTType::T_U64: dp->val.u64 = (uint64_t) value; break;
+ case nsXPTType::T_BOOL: dp->val.b = (bool) value; break;
+ case nsXPTType::T_CHAR: dp->val.c = (char) value; break;
+ case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break;
+
+ default:
+ NS_ERROR("bad type");
+ break;
+ }
}
nsresult result = self->mOuter->CallMethod((uint16_t) methodIndex, info,
@@ -150,23 +180,19 @@
// Load r11 with the constant 'n' and branch to SharedStub().
//
+// As G++3 ABI contains the length of the functionname in the mangled
+// name, it is difficult to get a generic assembler mechanism like
+// in the G++ 2.95 case.
// XXX Yes, it's ugly that we're relying on gcc's name-mangling here;
// however, it's quick, dirty, and'll break when the ABI changes on
// us, which is what we want ;-).
-
-
-// gcc-3 version
-//
-// As G++3 ABI contains the length of the functionname in the mangled
-// name, it is difficult to get a generic assembler mechanism like
-// in the G++ 2.95 case.
// Create names would be like:
// _ZN14nsXPTCStubBase5Stub1Ev
// _ZN14nsXPTCStubBase6Stub12Ev
// _ZN14nsXPTCStubBase7Stub123Ev
// _ZN14nsXPTCStubBase8Stub1234Ev
// etc.
-// Use assembler directives to get the names right...
+// Use assembler directives to get the names right.
#if _CALL_ELF == 2
# define STUB_ENTRY(n) \
@@ -252,7 +278,7 @@
#define SENTINEL_ENTRY(n) \
nsresult nsXPTCStubBase::Sentinel##n() \
{ \
- NS_ERROR("nsXPTCStubBase::Sentinel called"); \
+ NS_ERROR("nsXPTCStubBase::Sentinel called"); \
return NS_ERROR_NOT_IMPLEMENTED; \
}

View File

@ -1,22 +0,0 @@
# 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;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,8 +1,8 @@
PRODUCT="thunderbird"
CHANNEL="esr68"
VERSION="68.1.2"
VERSION="68.2.0"
VERSION_SUFFIX=""
RELEASE_TAG="2e34f364630f1f65724bb6e70616b95a041c47ea"
RELEASE_TAG="bee94d0a067adc165b3fc06bde071ca5556164cf"
PREV_VERSION=""
PREV_VERSION_SUFFIX=""
#SKIP_LOCALES="" # Uncomment to skip l10n and compare-locales-generation

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9444ec8718560d2b9e1b094bc57f1a8b3a275cac354ee0cf19f8cc483809d914
size 332126436

View File

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEECXsxMHeuYqAvhNpN8aZmj7t9Vy4FAl2c6PIACgkQ8aZmj7t9
Vy7ovg/9FVFsyCgRFYE0hNxe8BbaVxPUB0bjfTwD59uo8ILRaoYpcSOFEWMY8v4z
wH8sc8aKMPvRe5bilQsGuwTy1rhqUbcWeo75hC5+yhBcLBtlbXJPyb1hG56RPP4C
NKY8WI8fEXVHwGSbcndFPf4V0u0OVrgwOaL9ObaGY6LG7uNk7897IS9Es4hvFB/N
vulmCC23BBPcbhucx+xUlkRuoNX5kzRfmUv5O9/dyBnSiFALaQBH4jJoFbPRhOE0
P7w+YO9LO5+JGnPv1scwtguVyBvdr1yFqlI4fS18c8kasB1BFWdqRiZ/y0z2EFnj
zq8YfWMA7C/Ivnf7Yku875Xh9mALyA9+8x1VKgah8Nk+SCVNztuoEfjy1NJOF/GY
tDIa9bAfR2/6XEQ+KTEMcEPrzoqIBS4PmAiFw9hX3Z300DoeVa6LBQ9SUHOosxiR
aTRwsmir6esWJvBBKLZ5YBa6PVqVNB1a/hQZ9NXBP3gj30IR7Knd//QL5lXlZTy0
ttIrBSAaNs5I26zmCHk82Ol6lCwkTaNWVdfrU2IH6cZ5HUAjlvRuyq/6F2ZyHjJT
KKY6uthqQKuSvc2At9J9qpxRbKcWVPWtm9lMPcOaazRNsnOEOfu4zV/ypYJILe3k
wCwoiAaYYMxGUDmwtDjHxRut4KB7XGKJ6roqDoHR3UCfs3FJU8w=
=dnBi
-----END PGP SIGNATURE-----

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:e9fa1d0ced64ffc32faab9a0fc8e03865c04e4d29bfd7a3f1bf5d25594ce0600
size 331361548

View File

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEECXsxMHeuYqAvhNpN8aZmj7t9Vy4FAl2tx+QACgkQ8aZmj7t9
Vy7tFRAAiDG8LHBULSzEWxBjPzKjb3fvpVRgawNRrdJqk1NEIjHkURl4bonB6AQU
u9JeQeKlk+EX+vEkTUAsat30/koEJMaq0IkG7FKRaBgSGk8v6jrqdCRXjiOAlijB
OMcEUV5R/VYL9zRkFEh5WEzhgS7cqXTbDQ81K3ACCoxxF+RXyL1fNEcw34oQKkDf
+f0yxnzVhl8HO+x73PG6B+ncJLd8/esuqMzzSTRSjKscEaufPi6perOsl8OfGowa
3M3v88nu1HqFOAaIfkTUCBM/BhqgxjIQ4KkZ9aG0/akYtKyDUOPaBLpG1oOAMzZq
vx/A529E6lU3tpqEaQwOf/Iu+rMXDD+v4/EIAqCVlrpIZTjokhWXY8zSOoKAgEXA
tEozMFUbJdb89rHSvtBqSQ/sYlew9Vk0goG2FQBlNduzUV6CAb2wIg76Qpo/6g5O
PgQTDmcwWKKti2VB+J1dg6AyC7i6H2vlVYDbmvae6wG8h9qBfY2p92nBr2wQijzE
mJjGOLnEXwmurfBxZVfD+nAN9I5aY+yCoVjuQqZsxaMDT5n50NmdynJ4fiYXwSDO
yVfoET6nzGs33SCAqpAilCzxAJ3mLXQrUxiRCDzYDfjRuu8yXkxbuOmshQ0x+vJh
O7QEVOOhR4cy7BMNkudd3OWmuycotkA9DzK3YbfD49XDjrJ3McQ=
=BPD6
-----END PGP SIGNATURE-----