diff --git a/.gitignore b/.gitignore index a63d5e0..637c1a1 100644 --- a/.gitignore +++ b/.gitignore @@ -508,3 +508,5 @@ thunderbird-langpacks-3.1.2-20100803.tar.bz2 /thunderbird-langpacks-128.12.0esr-20250630.tar.xz /thunderbird-128.13.0esr.source.tar.xz /thunderbird-langpacks-128.13.0esr-20250723.tar.xz +/thunderbird-140.1.0esr.source.tar.xz +/thunderbird-langpacks-140.1.0esr-20250731.tar.xz diff --git a/build-swgl-gcc15-D221744.diff b/build-swgl-gcc15-D221744.diff deleted file mode 100644 index 370598b..0000000 --- a/build-swgl-gcc15-D221744.diff +++ /dev/null @@ -1,44 +0,0 @@ -diff --git a/gfx/wr/swgl/src/vector_type.h b/gfx/wr/swgl/src/vector_type.h ---- a/gfx/wr/swgl/src/vector_type.h -+++ b/gfx/wr/swgl/src/vector_type.h -@@ -238,27 +238,27 @@ - VectorType& operator%=(int x) { - data %= x; - return *this; - } - -- VectorType operator==(VectorType x) const { -- return VectorType::wrap(data == x.data); -+ VectorType operator==(VectorType x) const { -+ return VectorType::wrap(data == x.data); - } -- VectorType operator!=(VectorType x) const { -- return VectorType::wrap(data != x.data); -+ VectorType operator!=(VectorType x) const { -+ return VectorType::wrap(data != x.data); - } -- VectorType operator<(VectorType x) const { -- return VectorType::wrap(data < x.data); -+ VectorType operator<(VectorType x) const { -+ return VectorType::wrap(data < x.data); - } -- VectorType operator>(VectorType x) const { -- return VectorType::wrap(data > x.data); -+ VectorType operator>(VectorType x) const { -+ return VectorType::wrap(data > x.data); - } -- VectorType operator<=(VectorType x) const { -- return VectorType::wrap(data <= x.data); -+ VectorType operator<=(VectorType x) const { -+ return VectorType::wrap(data <= x.data); - } -- VectorType operator>=(VectorType x) const { -- return VectorType::wrap(data >= x.data); -+ VectorType operator>=(VectorType x) const { -+ return VectorType::wrap(data >= x.data); - } - - VectorType operator!() const { return wrap(!data); } - VectorType operator&&(VectorType x) const { return wrap(data & x.data); } - VectorType operator||(VectorType x) const { return wrap(data | x.data); } - diff --git a/build-swgl-gcc15-D222067.diff b/build-swgl-gcc15-D222067.diff deleted file mode 100644 index 2dda85f..0000000 --- a/build-swgl-gcc15-D222067.diff +++ /dev/null @@ -1,276 +0,0 @@ -diff --git a/gfx/wr/swgl/src/vector_type.h b/gfx/wr/swgl/src/vector_type.h ---- a/gfx/wr/swgl/src/vector_type.h -+++ b/gfx/wr/swgl/src/vector_type.h -@@ -92,10 +92,19 @@ - template <> - struct VectorMask { - typedef int type; - }; - -+# ifdef __has_builtin -+# if __has_builtin(__builtin_convertvector) -+# define HAS_BUILTIN_CONVERTVECTOR -+# endif -+# if __has_builtin(__builtin_shufflevector) -+# define HAS_BUILTIN_SHUFFLEVECTOR -+# endif -+# endif -+ - template - struct VectorType { - enum { SIZE = N }; - - typedef T data_type __attribute__((vector_size(sizeof(T) * N))); -@@ -134,10 +143,17 @@ - } - - T& operator[](size_t i) { return elements[i]; } - T operator[](size_t i) const { return elements[i]; } - -+# ifdef HAS_BUILTIN_CONVERTVECTOR -+ template -+ operator VectorType() const { -+ return VectorType::wrap( -+ __builtin_convertvector(data, typename VectorType::data_type)); -+ } -+# else - template - operator VectorType() const { - return VectorType::wrap( - (typename VectorType::data_type){U(x), U(y)}); - } -@@ -171,10 +187,11 @@ - U(elements[13]), - U(elements[14]), - U(elements[15]), - }); - } -+# endif - - VectorType operator-() const { return wrap(-data); } - VectorType operator~() const { return wrap(~data); } - - VectorType operator&(VectorType x) const { return wrap(data & x.data); } -@@ -266,46 +283,10 @@ - VectorType& operator=(VectorType x) { - data = x.data; - return *this; - } - -- VectorType shuffle(VectorType b, mask_index x, mask_index y, -- mask_index z, mask_index w) const { -- return VectorType::wrap(__builtin_shuffle( -- data, b.data, (typename VectorType::mask_type){x, y, z, w})); -- } -- VectorType shuffle(VectorType b, mask_index x, mask_index y, -- mask_index z, mask_index w, mask_index s, -- mask_index t, mask_index u, mask_index v) const { -- return VectorType::wrap(__builtin_shuffle( -- data, b.data, -- (typename VectorType::mask_type){x, y, z, w, s, t, u, v})); -- } -- VectorType shuffle(VectorType b, mask_index x, mask_index y, -- mask_index z, mask_index w, mask_index s, -- mask_index t, mask_index u, mask_index v, -- mask_index i, mask_index j, mask_index k, -- mask_index l, mask_index m, mask_index n, -- mask_index o, mask_index p) const { -- return VectorType::wrap( -- __builtin_shuffle(data, b.data, -- (typename VectorType::mask_type){ -- x, y, z, w, s, t, u, v, i, j, k, l, m, n, o, p})); -- } -- -- VectorType swizzle(mask_index x, mask_index y, mask_index z, -- mask_index w) const { -- return VectorType::wrap(__builtin_shuffle( -- data, (typename VectorType::mask_type){x, y, z, w})); -- } -- VectorType swizzle(mask_index x, mask_index y, mask_index z, -- mask_index w, mask_index s, mask_index t, -- mask_index u, mask_index v) const { -- return VectorType::wrap(__builtin_shuffle( -- data, (typename VectorType::mask_type){x, y, z, w, s, t, u, v})); -- } -- - SI VectorType wrap(half_type low, half_type high) { - VectorType v; - v.low_half = low; - v.high_half = high; - return v; -@@ -313,57 +294,90 @@ - - VectorType combine(VectorType high) const { - return VectorType::wrap(data, high.data); - } - --# define xxxx swizzle(0, 0, 0, 0) --# define yyyy swizzle(1, 1, 1, 1) --# define zzzz swizzle(2, 2, 2, 2) --# define wwww swizzle(3, 3, 3, 3) --# define xxyy swizzle(0, 0, 1, 1) --# define xxzz swizzle(0, 0, 2, 2) --# define yyww swizzle(1, 1, 3, 3) --# define zzww swizzle(2, 2, 3, 3) --# define xyxy swizzle(0, 1, 0, 1) --# define xzxz swizzle(0, 2, 0, 2) --# define ywyw swizzle(1, 3, 1, 3) --# define zwzw swizzle(2, 3, 2, 3) --# define zwxy swizzle(2, 3, 0, 1) --# define zyxw swizzle(2, 1, 0, 3) --# define xxyz swizzle(0, 0, 1, 2) --# define xyyz swizzle(0, 1, 1, 2) --# define xyzz swizzle(0, 1, 2, 2) --# define xzyw swizzle(0, 2, 1, 3) --# define yzwx swizzle(1, 2, 3, 0) --# define wxyz swizzle(3, 0, 1, 2) --# define wzyx swizzle(3, 2, 1, 0) --# define xxxxyyyy XXXXYYYY() -- VectorType XXXXYYYY() const { -- return swizzle(0, 0, 0, 0).combine(swizzle(1, 1, 1, 1)); -+# ifdef HAS_BUILTIN_SHUFFLEVECTOR -+ template -+ VectorType shuffle(VectorType b) const { -+ return VectorType::wrap( -+ __builtin_shufflevector(data, b.data, INDEXES...)); -+ } -+ -+ template -+ VectorType swizzle() const { -+ return VectorType::wrap( -+ __builtin_shufflevector(data, data, INDEXES...)); -+ } -+# else -+ template -+ VectorType shuffle(VectorType b) const { -+ return VectorType::wrap(__builtin_shuffle( -+ data, b.data, (typename VectorType::mask_type){INDEXES...})); -+ } -+ -+ template -+ VectorType shuffle(VectorType b) const { -+ return shuffle(b).combine(shuffle(b)); -+ } -+ -+ template -+ VectorType shuffle(VectorType b) const { -+ return shuffle(b).combine( -+ shuffle(b)); - } --# define zzzzwwww ZZZZWWWW() -- VectorType ZZZZWWWW() const { -- return swizzle(2, 2, 2, 2).combine(swizzle(3, 3, 3, 3)); -+ -+ template -+ VectorType shuffle(VectorType b) const { -+ return shuffle(b).combine( -+ shuffle(b)); - } --# define xyzwxyzw XYZWXYZW() -- VectorType XYZWXYZW() const { return combine(*this); } --# define xyxyxyxy XYXYXYXY() -- VectorType XYXYXYXY() const { -- return swizzle(0, 1, 0, 1).combine(swizzle(0, 1, 0, 1)); -+ -+ template -+ VectorType swizzle() const { -+ return shuffle(*this); - } --# define zwzwzwzw ZWZWZWZW() -- VectorType ZWZWZWZW() const { -- return swizzle(2, 3, 2, 3).combine(swizzle(2, 3, 2, 3)); -- } --# define xxyyzzww XXYYZZWW() -- VectorType XXYYZZWW() const { -- return swizzle(0, 0, 1, 1).combine(swizzle(2, 2, 3, 3)); -- } --# define xxxxyyyyzzzzwwww XXXXYYYYZZZZWWWW() -- VectorType XXXXYYYYZZZZWWWW() { -- return XXXXYYYY().combine(ZZZZWWWW()); -- } -+# endif -+ -+# define SWIZZLE(...) template swizzle<__VA_ARGS__>() -+ -+# define xxxx SWIZZLE(0, 0, 0, 0) -+# define yyyy SWIZZLE(1, 1, 1, 1) -+# define zzzz SWIZZLE(2, 2, 2, 2) -+# define wwww SWIZZLE(3, 3, 3, 3) -+# define xxyy SWIZZLE(0, 0, 1, 1) -+# define xxzz SWIZZLE(0, 0, 2, 2) -+# define yyww SWIZZLE(1, 1, 3, 3) -+# define zzww SWIZZLE(2, 2, 3, 3) -+# define xyxy SWIZZLE(0, 1, 0, 1) -+# define xzxz SWIZZLE(0, 2, 0, 2) -+# define ywyw SWIZZLE(1, 3, 1, 3) -+# define zwzw SWIZZLE(2, 3, 2, 3) -+# define zwxy SWIZZLE(2, 3, 0, 1) -+# define zyxw SWIZZLE(2, 1, 0, 3) -+# define xxyz SWIZZLE(0, 0, 1, 2) -+# define xyyz SWIZZLE(0, 1, 1, 2) -+# define xyzz SWIZZLE(0, 1, 2, 2) -+# define xzyw SWIZZLE(0, 2, 1, 3) -+# define yzwx SWIZZLE(1, 2, 3, 0) -+# define wxyz SWIZZLE(3, 0, 1, 2) -+# define wzyx SWIZZLE(3, 2, 1, 0) -+# define xxxxyyyy SWIZZLE(0, 0, 0, 0, 1, 1, 1, 1) -+# define zzzzwwww SWIZZLE(2, 2, 2, 2, 3, 3, 3, 3) -+# define xyzwxyzw SWIZZLE(0, 1, 2, 3, 0, 1, 2, 3) -+# define xyxyxyxy SWIZZLE(0, 1, 0, 1, 0, 1, 0, 1) -+# define zwzwzwzw SWIZZLE(2, 3, 2, 3, 2, 3, 2, 3) -+# define xxyyzzww SWIZZLE(0, 0, 1, 1, 2, 2, 3, 3) -+# define xxxxyyyyzzzzwwww \ -+ SWIZZLE(0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3) - }; - - template - struct VectorType { - typedef T data_type __attribute__((vector_size(sizeof(T) * 2))); -@@ -386,11 +400,11 @@ - VectorType operator|(VectorType x) const { return wrap(data | x.data); } - VectorType operator|(T x) const { return wrap(data | x); } - }; - - # define CONVERT(vector, type) ((type)(vector)) --# define SHUFFLE(a, b, ...) a.shuffle(b, __VA_ARGS__) -+# define SHUFFLE(a, b, ...) ((a).template shuffle<__VA_ARGS__>(b)) - - template - SI VectorType combine(VectorType a, VectorType b) { - return VectorType::wrap(a.data, b.data); - } -@@ -476,26 +490,19 @@ - template - SI VectorType zip2High(VectorType a, VectorType b) { - return SHUFFLE(a, b, 4, 5, 12, 13, 6, 7, 14, 15); - } - --#ifdef __clang__ - template - SI VectorType zip(VectorType a, VectorType b) { - return SHUFFLE(a, b, 0, 4, 1, 5, 2, 6, 3, 7); - } - - template - SI VectorType zip(VectorType a, VectorType b) { - return SHUFFLE(a, b, 0, 8, 1, 9, 2, 10, 3, 11, 4, 12, 5, 13, 6, 14, 7, 15); - } --#else --template --SI VectorType zip(VectorType a, VectorType b) { -- return combine(zipLow(a, b), zipHigh(a, b)); --} --#endif - - template - struct Unaligned { - template - SI T load(const P* p) { - diff --git a/expat-CVE-2022-25235.patch b/expat-CVE-2022-25235.patch deleted file mode 100644 index ac495b1..0000000 --- a/expat-CVE-2022-25235.patch +++ /dev/null @@ -1,49 +0,0 @@ -diff -up thunderbird-91.7.0/parser/expat/lib/xmltok.c.expat-CVE-2022-25235 thunderbird-91.7.0/parser/expat/lib/xmltok.c ---- thunderbird-91.7.0/parser/expat/lib/xmltok.c.expat-CVE-2022-25235 2022-03-02 17:57:38.364361168 +0100 -+++ thunderbird-91.7.0/parser/expat/lib/xmltok.c 2022-03-02 17:58:22.235512399 +0100 -@@ -65,13 +65,6 @@ - + ((((byte)[2]) >> 5) & 1)] \ - & (1u << (((byte)[2]) & 0x1F))) - --#define UTF8_GET_NAMING(pages, p, n) \ -- ((n) == 2 \ -- ? UTF8_GET_NAMING2(pages, (const unsigned char *)(p)) \ -- : ((n) == 3 \ -- ? UTF8_GET_NAMING3(pages, (const unsigned char *)(p)) \ -- : 0)) -- - /* Detection of invalid UTF-8 sequences is based on Table 3.1B - of Unicode 3.2: http://www.unicode.org/unicode/reports/tr28/ - with the additional restriction of not allowing the Unicode -diff -up thunderbird-91.7.0/parser/expat/lib/xmltok_impl.c.expat-CVE-2022-25235 thunderbird-91.7.0/parser/expat/lib/xmltok_impl.c ---- thunderbird-91.7.0/parser/expat/lib/xmltok_impl.c.expat-CVE-2022-25235 2022-03-02 17:57:38.365361172 +0100 -+++ thunderbird-91.7.0/parser/expat/lib/xmltok_impl.c 2022-03-02 18:04:51.240853247 +0100 -@@ -34,7 +34,7 @@ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ -- if (!IS_NAME_CHAR(enc, ptr, n)) { \ -+ if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NAME_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ -@@ -62,7 +62,7 @@ - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ -- if (!IS_NMSTRT_CHAR(enc, ptr, n)) { \ -+ if (IS_INVALID_CHAR(enc, ptr, n) || ! IS_NMSTRT_CHAR(enc, ptr, n)) { \ - *nextTokPtr = ptr; \ - return XML_TOK_INVALID; \ - } \ -@@ -1090,6 +1090,10 @@ PREFIX(prologTok)(const ENCODING *enc, c - case BT_LEAD ## n: \ - if (end - ptr < n) \ - return XML_TOK_PARTIAL_CHAR; \ -+ if (IS_INVALID_CHAR(enc, ptr, n)) { \ -+ *nextTokPtr = ptr; \ -+ return XML_TOK_INVALID; \ -+ } \ - if (IS_NMSTRT_CHAR(enc, ptr, n)) { \ - ptr += n; \ - tok = XML_TOK_NAME; \ diff --git a/expat-CVE-2022-25236.patch b/expat-CVE-2022-25236.patch deleted file mode 100644 index 84cafd2..0000000 --- a/expat-CVE-2022-25236.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff -up thunderbird-91.7.0/parser/expat/lib/xmlparse.c.expat-CVE-2022-25236 thunderbird-91.7.0/parser/expat/lib/xmlparse.c ---- thunderbird-91.7.0/parser/expat/lib/xmlparse.c.expat-CVE-2022-25236 2022-03-02 18:08:40.085642028 +0100 -+++ thunderbird-91.7.0/parser/expat/lib/xmlparse.c 2022-03-02 18:13:31.838667958 +0100 -@@ -700,8 +700,7 @@ XML_ParserCreate(const XML_Char *encodin - XML_Parser XMLCALL - XML_ParserCreateNS(const XML_Char *encodingName, XML_Char nsSep) - { -- XML_Char tmp[2]; -- *tmp = nsSep; -+ XML_Char tmp[2] = {nsSep, 0}; - return XML_ParserCreate_MM(encodingName, NULL, tmp); - } - #endif -@@ -1276,8 +1275,7 @@ XML_ExternalEntityParserCreate(XML_Parse - would be otherwise. - */ - if (ns) { -- XML_Char tmp[2]; -- *tmp = namespaceSeparator; -+ XML_Char tmp[2] = {parser->m_namespaceSeparator, 0}; - parser = parserCreate(encodingName, &parser->m_mem, tmp, newDtd); - } - else { -@@ -3667,6 +3665,16 @@ addBinding(XML_Parser parser, PREFIX *pr - if (!mustBeXML && isXMLNS - && (len > xmlnsLen || uri[len] != xmlnsNamespace[len])) - isXMLNS = XML_FALSE; -+ // NOTE: While Expat does not validate namespace URIs against RFC 3986, -+ // we have to at least make sure that the XML processor on top of -+ // Expat (that is splitting tag names by namespace separator into -+ // 2- or 3-tuples (uri-local or uri-local-prefix)) cannot be confused -+ // by an attacker putting additional namespace separator characters -+ // into namespace declarations. That would be ambiguous and not to -+ // be expected. -+ if (parser->m_ns && (uri[len] == parser->m_namespaceSeparator)) { -+ return XML_ERROR_SYNTAX; -+ } - } - isXML = isXML && len == xmlLen; - isXMLNS = isXMLNS && len == xmlnsLen; diff --git a/expat-CVE-2022-25315.patch b/expat-CVE-2022-25315.patch deleted file mode 100644 index 4d4efb7..0000000 --- a/expat-CVE-2022-25315.patch +++ /dev/null @@ -1,24 +0,0 @@ -diff -up thunderbird-91.7.0/parser/expat/lib/xmlparse.c.expat-CVE-2022-25315 thunderbird-91.7.0/parser/expat/lib/xmlparse.c ---- thunderbird-91.7.0/parser/expat/lib/xmlparse.c.expat-CVE-2022-25315 2022-03-02 18:17:50.966583254 +0100 -+++ thunderbird-91.7.0/parser/expat/lib/xmlparse.c 2022-03-02 18:19:27.636924735 +0100 -@@ -2479,6 +2479,7 @@ storeRawNames(XML_Parser parser) - while (tag) { - int bufSize; - int nameLen = sizeof(XML_Char) * (tag->name.strLen + 1); -+ size_t rawNameLen; - char *rawNameBuf = tag->buf + nameLen; - /* Stop if already stored. Since tagStack is a stack, we can stop - at the first entry that has already been copied; everything -@@ -2490,7 +2491,11 @@ storeRawNames(XML_Parser parser) - /* For re-use purposes we need to ensure that the - size of tag->buf is a multiple of sizeof(XML_Char). - */ -- bufSize = nameLen + ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); -+ rawNameLen = ROUND_UP(tag->rawNameLength, sizeof(XML_Char)); -+ /* Detect and prevent integer overflow. */ -+ if (rawNameLen > (size_t)INT_MAX - nameLen) -+ return XML_FALSE; -+ bufSize = nameLen + (int)rawNameLen; - if (bufSize > tag->bufEnd - tag->buf) { - char *temp = (char *)REALLOC(tag->buf, bufSize); - if (temp == NULL) diff --git a/mozilla-1170092.patch b/mozilla-1170092.patch index 36d2b00..66dacbf 100644 --- a/mozilla-1170092.patch +++ b/mozilla-1170092.patch @@ -1,6 +1,6 @@ -diff -up firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp ---- firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 2023-07-10 21:08:53.000000000 +0200 -+++ firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp 2023-07-17 10:33:23.443355156 +0200 +diff -up firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.mozilla-bmo1170092 firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp +--- firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp.mozilla-bmo1170092 2025-06-02 15:26:44.000000000 +0200 ++++ firefox-140.0/extensions/pref/autoconfig/src/nsReadConfig.cpp 2025-06-04 13:24:00.344728697 +0200 @@ -263,8 +263,20 @@ nsresult nsReadConfig::openAndEvaluateJS if (NS_FAILED(rv)) return rv; @@ -23,10 +23,10 @@ diff -up firefox-115.0.2/extensions/pref/autoconfig/src/nsReadConfig.cpp.1170092 } else { nsAutoCString location("resource://gre/defaults/autoconfig/"); location += aFileName; -diff -up firefox-115.0.2/modules/libpref/Preferences.cpp.1170092 firefox-115.0.2/modules/libpref/Preferences.cpp ---- firefox-115.0.2/modules/libpref/Preferences.cpp.1170092 2023-07-10 21:09:00.000000000 +0200 -+++ firefox-115.0.2/modules/libpref/Preferences.cpp 2023-07-17 10:33:23.444355156 +0200 -@@ -4825,6 +4825,9 @@ nsresult Preferences::InitInitialObjects +diff -up firefox-140.0/modules/libpref/Preferences.cpp.mozilla-bmo1170092 firefox-140.0/modules/libpref/Preferences.cpp +--- firefox-140.0/modules/libpref/Preferences.cpp.mozilla-bmo1170092 2025-06-02 15:26:51.000000000 +0200 ++++ firefox-140.0/modules/libpref/Preferences.cpp 2025-06-04 13:24:00.345430064 +0200 +@@ -4914,6 +4914,9 @@ nsresult Preferences::InitInitialObjects // // Thus, in the omni.jar case, we always load app-specific default // preferences from omni.jar, whether or not `$app == $gre`. @@ -36,10 +36,10 @@ diff -up firefox-115.0.2/modules/libpref/Preferences.cpp.1170092 firefox-115.0.2 nsresult rv = NS_ERROR_FAILURE; UniquePtr find; -diff -up firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp ---- firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 2023-07-10 22:57:20.000000000 +0200 -+++ firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp 2023-07-17 10:56:25.309692121 +0200 -@@ -72,6 +72,7 @@ +diff -up firefox-140.0/toolkit/xre/nsXREDirProvider.cpp.mozilla-bmo1170092 firefox-140.0/toolkit/xre/nsXREDirProvider.cpp +--- firefox-140.0/toolkit/xre/nsXREDirProvider.cpp.mozilla-bmo1170092 2025-06-02 15:27:00.000000000 +0200 ++++ firefox-140.0/toolkit/xre/nsXREDirProvider.cpp 2025-06-04 15:44:09.413562326 +0200 +@@ -76,6 +76,7 @@ #endif #ifdef XP_UNIX # include @@ -47,7 +47,7 @@ diff -up firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-115.0. #endif #ifdef XP_IOS # include "UIKitDirProvider.h" -@@ -478,6 +479,17 @@ nsXREDirProvider::GetFile(const char* aP +@@ -462,6 +463,17 @@ nsXREDirProvider::GetFile(const char* aP rv = file->AppendNative(nsLiteralCString(PREF_OVERRIDE_DIRNAME)); NS_ENSURE_SUCCESS(rv, rv); rv = EnsureDirectoryExists(file); @@ -60,12 +60,12 @@ diff -up firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-115.0. + appInfo->GetName(appName); + ToLowerCase(appName); + sysConfigDir.Append(appName); -+ NS_NewNativeLocalFile(sysConfigDir, false, getter_AddRefs(file)); ++ NS_NewNativeLocalFile(sysConfigDir, getter_AddRefs(file)); + rv = EnsureDirectoryExists(file); } else { // We don't know anything about this property. Fail without warning, because // otherwise we'll get too much warning spam due to -@@ -694,6 +706,16 @@ nsXREDirProvider::GetFiles(const char* a +@@ -518,6 +530,16 @@ nsXREDirProvider::GetFiles(const char* a } #endif @@ -82,9 +82,9 @@ diff -up firefox-115.0.2/toolkit/xre/nsXREDirProvider.cpp.1170092 firefox-115.0. rv = NS_NewArrayEnumerator(aResult, directories, NS_GET_IID(nsIFile)); } else if (!strcmp(aProperty, NS_APP_CHROME_DIR_LIST)) { // NS_APP_CHROME_DIR_LIST is only used to get default (native) icons -diff -up firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h ---- firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h.1170092 2023-07-10 21:09:13.000000000 +0200 -+++ firefox-115.0.2/xpcom/io/nsAppDirectoryServiceDefs.h 2023-07-17 10:33:23.444355156 +0200 +diff -up firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h.mozilla-bmo1170092 firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h +--- firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h.mozilla-bmo1170092 2025-06-02 15:27:01.000000000 +0200 ++++ firefox-140.0/xpcom/io/nsAppDirectoryServiceDefs.h 2025-06-04 13:24:00.346423861 +0200 @@ -58,6 +58,7 @@ #define NS_APP_PREFS_DEFAULTS_DIR_LIST "PrefDL" #define NS_APP_PREFS_OVERRIDE_DIR \ diff --git a/sources b/sources index accbc11..ac2f695 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ -SHA512 (cbindgen-vendor.tar.xz) = 3e7eaff088db918e95f5505e5feeb06e8b7b95cc62042a6d163a708fc76baea43d21bf49cf7e02bc64fdfc61e8d7704057dbb225098de56e110783104d166c54 -SHA512 (thunderbird-128.13.0esr.source.tar.xz) = 0439ff3bf8549c68778a2bf715da82b45a9e97c2ff4a8d06147d1b65c13031489a4126889a5a561484af385c428595f9d343fb6e266beeb923d4671665f2dbdc -SHA512 (thunderbird-langpacks-128.13.0esr-20250723.tar.xz) = cb866a5f93ef3f9bcc0d23de9ac0859fef5884edc353895c5bf1c5ed6d90d1148f137c86c19b9c7d6381eafa7fe8a689f0c7ead652ba4fadb3c55e4ea038a2a8 +SHA512 (thunderbird-140.1.0esr.source.tar.xz) = f12e2dbda3c4558d06f59af25ff7b374d34e241b9c085236d0d0646dc331f62df85dbe2aa8ae5ff356fa5d0e4b4d73415a10e0e6f5c5ee8bd58305a43aa44c06 +SHA512 (thunderbird-langpacks-140.1.0esr-20250731.tar.xz) = 8afe455efff10664a62a4fdf8969621803275e129cae15af1cb2d8b8f02a7432adba8f58dda8bf7429ad2898962c985754430c4bfe6e4066d09d2ef35a191be5 +SHA512 (cbindgen-vendor.tar.xz) = 08d9e2aeb8a0fafd6794d36811a1b4886d01b0745bf68dbb5e25fbf6ed1a8000238eac195aec16eac6e9968ad913d80350c1293595fab63325b9c1ff507d199f diff --git a/thunderbird.spec b/thunderbird.spec index 4ce0a10..a3e2e2a 100644 --- a/thunderbird.spec +++ b/thunderbird.spec @@ -2,6 +2,10 @@ # first f42 https://koji.fedoraproject.org/koji/taskinfo?taskID=124917502 # then f40 https://koji.fedoraproject.org/koji/taskinfo?taskID=125295645 # then also f41 https://koji.fedoraproject.org/koji/taskinfo?taskID=125632253 +# Excluded due to https://bugzilla.mozilla.org/show_bug.cgi?id=1792159 +# https://bugzilla.redhat.com/show_bug.cgi?id=2129720 +ExcludeArch: i686 + %ifarch ppc64le %global rustflags_debuginfo 1 %endif @@ -87,13 +91,13 @@ ExcludeArch: armv7hl Summary: Mozilla Thunderbird mail/newsgroup client Name: thunderbird -Version: 128.13.0 +Version: 140.1.0 Release: 1%{?dist} URL: http://www.mozilla.org/projects/thunderbird/ License: MPL-2.0 OR GPL-2.0-or-later OR LGPL-2.0-or-later Source0: https://archive.mozilla.org/pub/thunderbird/releases/%{version}%{?pre_version}/source/thunderbird-%{version}%{?pre_version}.source.tar.xz %if %{build_langpacks} -Source1: thunderbird-langpacks-%{version}%{?pre_version}-20250723.tar.xz +Source1: thunderbird-langpacks-%{version}%{?pre_version}-20250731.tar.xz %endif Source3: get-calendar-langpacks.sh Source4: cbindgen-vendor.tar.xz @@ -126,8 +130,6 @@ Patch53: firefox-gcc-build.patch Patch71: 0001-GLIBCXX-fix-for-GCC-12.patch Patch78: firefox-i686-build.patch Patch79: firefox-gcc-13-build.patch -Patch80: build-swgl-gcc15-D221744.diff -Patch81: build-swgl-gcc15-D222067.diff # PROTOBUF_MUSTTAIL return ... error: cannot tail-call: target is not able to optimize the call into a sibling call Patch82: build-s390x-protobuf-musttail.patch @@ -140,9 +142,6 @@ Patch402: mozilla-526293.patch Patch406: mozilla-1170092.patch # Bundled expat backported patches -Patch501: expat-CVE-2022-25235.patch -Patch502: expat-CVE-2022-25236.patch -Patch503: expat-CVE-2022-25315.patch # Tentative patch for RUSTFLAGS parsing issue, # borrowed from firefox commit 24c9accce19c5cae9394430b24eaf938a9c17882: @@ -183,10 +182,10 @@ BuildRequires: libXrender-devel BuildRequires: hunspell-devel BuildRequires: llvm %if 0%{?fedora} >= 40 || 0%{?rhel} >= 10 -BuildRequires: clang17 -BuildRequires: clang17-libs -BuildRequires: llvm17-devel -%global llvm_suffix -17 +BuildRequires: clang +BuildRequires: clang-libs +BuildRequires: llvm-devel +%global llvm_suffix -20 %else BuildRequires: clang BuildRequires: clang-libs @@ -311,21 +310,15 @@ debug %{name}, you want to install %{name}-debuginfo instead. %patch -P 422 -p1 -b .0001-GLIBCXX-fix-for-GCC-12 -%patch -P 501 -p1 -b .expat-CVE-2022-25235 -%patch -P 502 -p1 -b .expat-CVE-2022-25236 -%patch -P 503 -p1 -b .expat-CVE-2022-25315 - -%patch -P40 -p1 -b .aarch64-skia +#patch -P40 -p1 -b .aarch64-skia %patch -P44 -p1 -b .build-arm-libopus #patch -P53 -p1 -b .firefox-gcc-build %patch -P71 -p1 -b .0001-GLIBCXX-fix-for-GCC-12 %patch -P78 -p1 -b .firefox-i686 %patch -P79 -p1 -b .firefox-gcc-13-build -%patch -P80 -p1 -b .swgl-gcc15-1 -%patch -P81 -p1 -b .swgl-gcc15-2 %patch -P82 -p1 -b .build-s390x-protobuf-musttail -%patch -P 1200 -p1 -b .rustflags-commasplit +#patch -P 1200 -p1 -b .rustflags-commasplit %if %{official_branding} # Required by Mozilla Corporation @@ -417,8 +410,6 @@ echo "ac_add_options --disable-crashreporter" >> .mozconfig # Same as https://bugzilla.redhat.com/show_bug.cgi?id=2239046 for Firefox: # Clang 17 upstream's detection fails, tell it where to look. -echo "ac_add_options --with-clang-path=`which clang%{?llvm_suffix}`" >> .mozconfig -echo "ac_add_options --with-libclang-path=`llvm-config%{?llvm_suffix} --libdir`" >> .mozconfig echo 'export NODEJS="%{nodewrapperdir}/node-stdout-nonblocking-wrapper"' >> .mozconfig @@ -427,6 +418,14 @@ echo 'export MOZ_APP_REMOTINGNAME=net.thunderbird.Thunderbird' >> .mozconfig %else echo 'export MOZ_APP_REMOTINGNAME=thunderbird' >> .mozconfig %endif +# https://bugzilla.redhat.com/show_bug.cgi?id=2239046 +# with clang 17 upstream's detection fails, so let's just tell it +# where to look +%if 0%{?fedora} >= 42 +echo "ac_add_options --with-libclang-path=`llvm-config-20 --libdir`" >> .mozconfig +%else +echo "ac_add_options --with-libclang-path=`llvm-config --libdir`" >> .mozconfig +%endif # Remove executable bit to make brp-mangle-shebangs happy. find third_party -type f -iname "*.rs"|xargs chmod a-x