diff --git a/MozillaThunderbird.changes b/MozillaThunderbird.changes index aba51d1..cd8cb66 100644 --- a/MozillaThunderbird.changes +++ b/MozillaThunderbird.changes @@ -1,3 +1,137 @@ +------------------------------------------------------------------- +Mon May 1 08:52:52 UTC 2017 - wr@rosenauer.org + +- update to Thunderbird 52.1.0 + * Background images not working and other issues related to + embedded images when composing email have been fixed + * Google Oauth setup can sometimes not progress to the next step + * requires NSS >= 3.28.4 +- security fixes (boo#1035082), MFSA 2017-13 + * CVE-2017-5443 (bmo#1342661) + Out-of-bounds write during BinHex decoding + * CVE-2017-5429 (bmo#1341096, bmo#1342823, bmo#1343261, bmo#1348894, + bmo#1348941, bmo#1349340, bmo#1350844, bmo#1352926, bmo#1353088) + Memory safety bugs fixed in Firefox 53, Firefox ESR 45.9, and + Firefox ESR 52.1 + * CVE-2017-5464 (bmo#1347075) + Memory corruption with accessibility and DOM manipulation + * CVE-2017-5465 (bmo#1347617) + Out-of-bounds read in ConvolvePixel + * CVE-2017-5466 (bmo#1353975) + Origin confusion when reloading isolated data:text/html URL + * CVE-2017-5467 (bmo#1347262) + Memory corruption when drawing Skia content + * CVE-2017-5460 (bmo#1343642) + Use-after-free in frame selection + * CVE-2017-5461 (bmo#1344380) + Out-of-bounds write in Base64 encoding in NSS + * CVE-2017-5449 (bmo#1340127) + Crash during bidirectional unicode manipulation with animation + * CVE-2017-5446 (bmo#1343505) + Out-of-bounds read when HTTP/2 DATA frames are sent with incorrect data + * CVE-2017-5447 (bmo#1343552) + Out-of-bounds read during glyph processing + * CVE-2017-5444 (bmo#1344461) + Buffer overflow while parsing application/http-index-format content + * CVE-2017-5445 (bmo#1344467) + Uninitialized values used while parsing application/http-index-format + content + * CVE-2017-5442 (bmo#1347979) + Use-after-free during style changes + * CVE-2017-5469 (bmo#1292534) + Potential Buffer overflow in flex-generated code + * CVE-2017-5440 (bmo#1336832) + Use-after-free in txExecutionState destructor during XSLT processing + * CVE-2017-5441 (bmo#1343795) + Use-after-free with selection during scroll events + * CVE-2017-5439 (bmo#1336830) + Use-after-free in nsTArray Length() during XSLT processing + * CVE-2017-5438 (bmo#1336828) + Use-after-free in nsAutoPtr during XSLT processing + * CVE-2017-5437 (bmo#1343453) + Vulnerabilities in Libevent library + * CVE-2017-5436 (bmo#1345461) + Out-of-bounds write with malicious font in Graphite 2 + * CVE-2017-5435 (bmo#1350683) + Use-after-free during transaction processing in the editor + * CVE-2017-5434 (bmo#1349946) + Use-after-free during focus handling + * CVE-2017-5433 (bmo#1347168) + Use-after-free in SMIL animation functions + * CVE-2017-5432 (bmo#1346654) + Use-after-free in text input selection + * CVE-2017-5430 (bmo#1329796, bmo#1337418, bmo#1339722, bmo#1340482, + bmo#1342101, bmo#1344081, bmo#1344305, bmo#1344686, bmo#1346140, + bmo#1346419, bmo#1348143, bmo#1349621, bmo#1349719, bmo#1353476) + Memory safety bugs fixed in Firefox 53 and Firefox ESR 52.1 + * CVE-2017-5459 (bmo#1333858) + Buffer overflow in WebGL + * CVE-2017-5462 (bmo#1345089) + DRBG flaw in NSS + * CVE-2017-5454 (bmo#1349276) + Sandbox escape allowing file system read access through file + picker + * CVE-2017-5451 (bmo#1273537) + Addressbar spoofing with onblur event + +------------------------------------------------------------------- +Mon Apr 17 12:43:48 UTC 2017 - wr@rosenauer.org + +- update to Thunderbird 52.0.1 + * Clicking on a link in an email may not open this link in the + external browser + * addon blocklist updates +- enable ALSA for systems w/o PA +- require libffi explicitely to fix PPC64LE build where a system + library is required + +------------------------------------------------------------------- +Sat Mar 18 21:06:01 UTC 2017 - wr@rosenauer.org + +- update to Thunderbird 52.0 + * Optionally remove corresponding data files when removing an account + * Possibility to copy message filter + * Calendar: Event can now be created and edited in a tab + * Calendar: Processing of received invitation counter proposals + * Chat: Support Twitter Direct Messages + * Chat: Liking and favoriting in Twitter + * Chat: Removed Yahoo! Messenger support + * serveral bugfixes +- security fixes (bsc#1028391, MFSA 2017-09): + In general, these flaws cannot be exploited through email because + scripting is disabled when reading mail, but are potentially + risks in browser or browser-like contexts. + * CVE-2017-5400: asm.js JIT-spray bypass of ASLR and DEP (bmo#1334933) + * CVE-2017-5401: Memory Corruption when handling ErrorResult (bmo#1328861) + * CVE-2017-5402: Use-after-free working with events in FontFace objects (bmo#1334876) + * CVE-2017-5403: Use-after-free using addRange to add range to an incorrect root object (bmo#1340186) + * CVE-2017-5404: Use-after-free working with ranges in selections (bmo#1340138) + * CVE-2017-5406: Segmentation fault in Skia with canvas operations (bmo#1306890) + * CVE-2017-5407: Pixel and history stealing via floating-point timing side channel with SVG filters (bmo#1336622) + * CVE-2017-5410: Memory corruption during JavaScript garbage collection incremental sweeping (bmo#1330687) + * CVE-2017-5408: Cross-origin reading of video captions in violation of CORS (bmo#1313711) + * CVE-2017-5412: Buffer overflow read in SVG filters (bmo#1328323) + * CVE-2017-5413: Segmentation fault during bidirectional operations (bmo#1337504) + * CVE-2017-5414: File picker can choose incorrect default directory (bmo#1319370) + * CVE-2017-5416: Null dereference crash in HttpChannel (bmo#1328121) + * CVE-2017-5426: Gecko Media Plugin sandbox is not started if seccomp-bpf filter is running (bmo#1257361) + * CVE-2017-5418: Out of bounds read when parsing HTTP digest authorization responses (bmo#1338876) + * CVE-2017-5419: Repeated authentication prompts lead to DOS attack (bmo#1312243) + * CVE-2017-5405: FTP response codes can cause use of uninitialized values for ports (bmo#1336699) + * CVE-2017-5421: Print preview spoofing (bmo#1301876) + * CVE-2017-5422: DOS attack by using view-source: protocol repeatedly in one hyperlink (bmo#1295002) + * CVE-2017-5399: Memory safety bugs fixed in Thunderbird 52 + * CVE-2017-5398: Memory safety bugs fixed in Thunderbird 52 and Thunderbird 45.8 +- removed obsolete patches + * mozilla-aarch64-48bit-va.patch + * mozilla-binutils-visibility.patch + * mozilla-flex_buffer_overrun.patch + * mozilla-gcc6.patch +- added generic mozilla patches + * mozilla-aarch64-startup-crash.patch +- require newer versions of NSPR and NSS +- use Gtk3 for Tumbleweed + ------------------------------------------------------------------- Tue Mar 7 15:08:23 UTC 2017 - wr@rosenauer.org diff --git a/MozillaThunderbird.spec b/MozillaThunderbird.spec index b69663d..ec11d5d 100644 --- a/MozillaThunderbird.spec +++ b/MozillaThunderbird.spec @@ -17,21 +17,18 @@ # -%define mainversion 45.8.0 +%define mainversion 52.1.0 %define update_channel release -%define releasedate 2017030300 - -%if %suse_version > 1310 -%define gstreamer_ver 1.0 -%define gstreamer 1 -%else -%define gstreamer_ver 0.10 -%endif +%define releasedate 201704290000 %bcond_without mozilla_tb_kde4 %bcond_with mozilla_tb_valgrind %bcond_without mozilla_tb_optimize_for_size +%if 0%{?suse_version} > 1320 +%define mozilla_use_gtk3 1 +%endif + Name: MozillaThunderbird BuildRequires: Mesa-devel BuildRequires: autoconf213 @@ -44,8 +41,8 @@ BuildRequires: libcurl-devel BuildRequires: libgnomeui-devel BuildRequires: libidl-devel BuildRequires: libnotify-devel -BuildRequires: mozilla-nspr-devel >= 4.12 -BuildRequires: mozilla-nss-devel >= 3.21.3 +BuildRequires: mozilla-nspr-devel >= 4.13.1 +BuildRequires: mozilla-nss-devel >= 3.28.4 BuildRequires: python BuildRequires: startup-notification-devel BuildRequires: unzip @@ -54,22 +51,22 @@ BuildRequires: xorg-x11-libXt-devel BuildRequires: xz BuildRequires: yasm BuildRequires: zip +BuildRequires: pkgconfig(libffi) BuildRequires: pkgconfig(libpulse) %if %{with mozilla_tb_valgrind} BuildRequires: pkgconfig(valgrind) %endif -BuildRequires: pkgconfig(gstreamer-%gstreamer_ver) -BuildRequires: pkgconfig(gstreamer-app-%gstreamer_ver) -BuildRequires: pkgconfig(gstreamer-plugins-base-%gstreamer_ver) -%if 0%{?gstreamer} == 1 -Requires: libgstreamer-1_0-0 -Recommends: gstreamer-fluendo-mp3 -Recommends: gstreamer-plugin-libav -%else -Requires: libgstreamer-0_10-0 -Recommends: gstreamer-0_10-fluendo-mp3 -Recommends: gstreamer-0_10-plugins-ffmpeg +%if 0%{?mozilla_use_gtk3} +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(gobject-2.0) +BuildRequires: pkgconfig(gtk+-3.0) >= 3.4.0 +BuildRequires: pkgconfig(gtk+-unix-print-3.0) %endif +# libavcodec is required for H.264 support but the +# openSUSE version is currently not able to play H.264 +# therefore the Packman version is required +# minimum version of libavcodec is 53 +Recommends: libavcodec-full >= 0.10.16 Version: %{mainversion} Release: 0 Provides: thunderbird = %{version} @@ -103,16 +100,13 @@ Patch2: mozilla-nongnome-proxies.patch Patch3: mozilla-kde.patch Patch4: mozilla-develdirs.patch Patch5: mozilla-no-stdcxx-check.patch -Patch6: mozilla-gcc6.patch -Patch8: mozilla-aarch64-48bit-va.patch -Patch9: mozilla-binutils-visibility.patch +Patch6: mozilla-aarch64-startup-crash.patch # Thunderbird/mail Patch20: tb-ssldap.patch -# hotfix -Patch150: mozilla-flex_buffer_overrun.patch BuildRoot: %{_tmppath}/%{name}-%{version}-build PreReq: coreutils fileutils textutils /bin/sh Recommends: libcanberra0 +Recommends: libpulse0 ### build options %ifarch aarch64 ppc ppc64 ppc64le s390 s390x ia64 %arm %define crashreporter 0 @@ -132,11 +126,7 @@ Conflicts: thunderbird-esr %define progname thunderbird %define progdir %{_prefix}/%_lib/thunderbird %define libgssapi libgssapi_krb5.so.2 -%if %suse_version > 1130 %define desktop_file_name thunderbird -%else -%define desktop_file_name %{name} -%endif %description Mozilla Thunderbird is a redesign of the Mozilla Mail component. It is @@ -204,9 +194,6 @@ pushd mozilla %patch4 -p1 %patch5 -p1 %patch6 -p1 -%patch8 -p1 -%patch9 -p1 -%patch150 -p1 popd # comm-central patches %patch20 -p1 @@ -272,7 +259,13 @@ ac_add_options --libdir=%{progdir} ac_add_options --includedir=%{_includedir} ac_add_options --disable-tests ac_add_options --disable-debug +ac_add_options --enable-alsa ac_add_options --enable-optimize +%if 0%{?mozilla_use_gtk3} +ac_add_options --enable-default-toolkit=cairo-gtk3 +%else +ac_add_options --enable-default-toolkit=cairo-gtk2 +%endif ac_add_options --with-system-nspr ac_add_options --with-system-nss ac_add_options --with-system-jpeg @@ -281,15 +274,10 @@ ac_add_options --with-l10n-base=$RPM_BUILD_DIR/l10n ac_add_options --disable-updater #ac_add_options --with-system-png # no apng support ac_add_options --enable-system-hunspell -ac_add_options --disable-installer -ac_add_options --disable-mochitest ac_add_options --enable-startup-notification ac_add_options --enable-official-branding ac_add_options --disable-necko-wifi ac_add_options --enable-update-channel=%{update_channel} -%if 0%{?gstreamer} == 1 -ac_add_options --enable-gstreamer=1.0 -%endif %if %has_system_cairo ac_add_options --enable-system-cairo %endif @@ -476,7 +464,14 @@ exit 0 %dir %{progdir} %{progdir}/application.ini %{progdir}/blocklist.xml +%{progdir}/chrome.manifest %{progdir}/dependentlibs.list +%{progdir}/fonts/ +%if 0%{?mozilla_use_gtk3} +%dir %{progdir}/gtk2 +%{progdir}/gtk2/libmozgtk.so +%endif +%{progdir}/icudt58l.dat %{progdir}/*.so %{progdir}/omni.ja %{progdir}/platform.ini diff --git a/compare-locales.tar.xz b/compare-locales.tar.xz index 85fc135..7e27d96 100644 --- a/compare-locales.tar.xz +++ b/compare-locales.tar.xz @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:6469fc90ac155189cc9fa2b1fb209d2997de2c45d8a05e7e1d6c09ae015d3171 -size 28372 +oid sha256:a35ac9cfa29bb1905b4cc9314cb635f2bc7fab9aa57f001d84dae22f5a860ff7 +size 28384 diff --git a/create-tar.sh b/create-tar.sh index ee2ec32..b3aa918 100644 --- a/create-tar.sh +++ b/create-tar.sh @@ -1,9 +1,9 @@ #!/bin/bash -CHANNEL="esr45" +CHANNEL="esr52" BRANCH="releases/comm-$CHANNEL" -RELEASE_TAG="THUNDERBIRD_45_8_0_RELEASE" -VERSION="45.8.0" +RELEASE_TAG="THUNDERBIRD_52_1_0_RELEASE" +VERSION="52.1.0" echo "cloning $BRANCH..." hg clone http://hg.mozilla.org/$BRANCH thunderbird diff --git a/l10n-45.8.0.tar.xz b/l10n-45.8.0.tar.xz deleted file mode 100644 index 4ce8db0..0000000 --- a/l10n-45.8.0.tar.xz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:76a50bb992378a93c0e39072edc1d9f5f5899d398d8fe8df668c7c98b18af72e -size 24497668 diff --git a/l10n-52.1.0.tar.xz b/l10n-52.1.0.tar.xz new file mode 100644 index 0000000..874c2dc --- /dev/null +++ b/l10n-52.1.0.tar.xz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee61355499cabe2e23a2340aa8d9a17f60dc8f71d21e39ab72f2d01e36421def +size 26235228 diff --git a/mozilla-aarch64-48bit-va.patch b/mozilla-aarch64-48bit-va.patch deleted file mode 100644 index bf04e26..0000000 --- a/mozilla-aarch64-48bit-va.patch +++ /dev/null @@ -1,170 +0,0 @@ - -# HG changeset patch -# User Zheng Xu -# Date 1464657720 -7200 -# Node ID dfaafbaaa2919a033c4c0abdd5830f4ea413bed6 -# Parent 499f16ca85ec48d1896a1633730715f32bd62140 -Bug 1143022 - Manually mmap on arm64 to ensure high 17 bits are clear. r=ehoogeveen - -There might be 48-bit VA on arm64 depending on kernel configuration. -Manually mmap heap memory to align with the assumption made by JS engine. - -diff --git a/js/src/gc/Memory.cpp b/js/src/gc/Memory.cpp ---- a/js/src/gc/Memory.cpp -+++ b/js/src/gc/Memory.cpp -@@ -430,17 +430,17 @@ InitMemorySubsystem() - if (pageSize == 0) - pageSize = allocGranularity = size_t(sysconf(_SC_PAGESIZE)); - } - - static inline void* - MapMemoryAt(void* desired, size_t length, int prot = PROT_READ | PROT_WRITE, - int flags = MAP_PRIVATE | MAP_ANON, int fd = -1, off_t offset = 0) - { --#if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) -+#if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) || defined(__aarch64__) - MOZ_ASSERT(0xffff800000000000ULL & (uintptr_t(desired) + length - 1) == 0); - #endif - void* region = mmap(desired, length, prot, flags, fd, offset); - if (region == MAP_FAILED) - return nullptr; - /* - * mmap treats the given address as a hint unless the MAP_FIXED flag is - * used (which isn't usually what you want, as this overrides existing -@@ -480,16 +480,51 @@ MapMemory(size_t length, int prot = PROT - * as out of memory. - */ - if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { - if (munmap(region, length)) - MOZ_ASSERT(errno == ENOMEM); - return nullptr; - } - return region; -+#elif defined(__aarch64__) -+ /* -+ * There might be similar virtual address issue on arm64 which depends on -+ * hardware and kernel configurations. But the work around is slightly -+ * different due to the different mmap behavior. -+ * -+ * TODO: Merge with the above code block if this implementation works for -+ * ia64 and sparc64. -+ */ -+ const uintptr_t start = UINT64_C(0x0000070000000000); -+ const uintptr_t end = UINT64_C(0x0000800000000000); -+ const uintptr_t step = ChunkSize; -+ /* -+ * Optimization options if there are too many retries in practice: -+ * 1. Examine /proc/self/maps to find an available address. This file is -+ * not always available, however. In addition, even if we examine -+ * /proc/self/maps, we may still need to retry several times due to -+ * racing with other threads. -+ * 2. Use a global/static variable with lock to track the addresses we have -+ * allocated or tried. -+ */ -+ uintptr_t hint; -+ void* region = MAP_FAILED; -+ for (hint = start; region == MAP_FAILED && hint + length <= end; hint += step) { -+ region = mmap((void*)hint, length, prot, flags, fd, offset); -+ if (region != MAP_FAILED) { -+ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { -+ if (munmap(region, length)) { -+ MOZ_ASSERT(errno == ENOMEM); -+ } -+ region = MAP_FAILED; -+ } -+ } -+ } -+ return region == MAP_FAILED ? nullptr : region; - #else - void* region = MozTaggedAnonymousMmap(nullptr, length, prot, flags, fd, offset, "js-gc-heap"); - if (region == MAP_FAILED) - return nullptr; - return region; - #endif - } - -diff --git a/js/src/jsapi-tests/testGCAllocator.cpp b/js/src/jsapi-tests/testGCAllocator.cpp ---- a/js/src/jsapi-tests/testGCAllocator.cpp -+++ b/js/src/jsapi-tests/testGCAllocator.cpp -@@ -307,48 +307,72 @@ void* mapMemoryAt(void* desired, size_t - void* mapMemory(size_t length) { return nullptr; } - void unmapPages(void* p, size_t size) { } - - #elif defined(XP_UNIX) - - void* - mapMemoryAt(void* desired, size_t length) - { --#if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) -+#if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) || defined(__aarch64__) - MOZ_RELEASE_ASSERT(0xffff800000000000ULL & (uintptr_t(desired) + length - 1) == 0); - #endif - void* region = mmap(desired, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); - if (region == MAP_FAILED) - return nullptr; - if (region != desired) { - if (munmap(region, length)) - MOZ_RELEASE_ASSERT(errno == ENOMEM); - return nullptr; - } - return region; - } - - void* - mapMemory(size_t length) - { -- void* hint = nullptr; -+ int prot = PROT_READ | PROT_WRITE; -+ int flags = MAP_PRIVATE | MAP_ANON; -+ int fd = -1; -+ off_t offset = 0; -+ // The test code must be aligned with the implementation in gc/Memory.cpp. - #if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) -- hint = (void*)0x0000070000000000ULL; --#endif -- void* region = mmap(hint, length, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); -+ void* region = mmap((void*)0x0000070000000000, length, prot, flags, fd, offset); - if (region == MAP_FAILED) - return nullptr; --#if defined(__ia64__) || (defined(__sparc64__) && defined(__NetBSD__)) -- if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000ULL) { -+ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { - if (munmap(region, length)) - MOZ_RELEASE_ASSERT(errno == ENOMEM); - return nullptr; - } -+ return region; -+#elif defined(__aarch64__) -+ const uintptr_t start = UINT64_C(0x0000070000000000); -+ const uintptr_t end = UINT64_C(0x0000800000000000); -+ const uintptr_t step = ChunkSize; -+ uintptr_t hint; -+ void* region = MAP_FAILED; -+ for (hint = start; region == MAP_FAILED && hint + length <= end; hint += step) { -+ region = mmap((void*)hint, length, prot, flags, fd, offset); -+ if (region != MAP_FAILED) { -+ if ((uintptr_t(region) + (length - 1)) & 0xffff800000000000) { -+ if (munmap(region, length)) { -+ MOZ_RELEASE_ASSERT(errno == ENOMEM); -+ } -+ region = MAP_FAILED; -+ } -+ } -+ } -+ return region == MAP_FAILED ? nullptr : region; -+#else -+ void* region = mmap(nullptr, length, prot, flags, fd, offset); -+ if (region == MAP_FAILED) -+ return nullptr; -+ return region; - #endif -- return region; - } - - void - unmapPages(void* p, size_t size) - { - if (munmap(p, size)) - MOZ_RELEASE_ASSERT(errno == ENOMEM); - } - diff --git a/mozilla-aarch64-startup-crash.patch b/mozilla-aarch64-startup-crash.patch new file mode 100644 index 0000000..e1c1876 --- /dev/null +++ b/mozilla-aarch64-startup-crash.patch @@ -0,0 +1,31 @@ +# HG changeset patch +# Parent a5cfa3aa11a9d3391df49de6fc5a0e5232c12c10 +Bug 991344 - Rpi3: Firefox crashes after a few seconds of usage + +diff --git a/netwerk/base/nsIOService.cpp b/netwerk/base/nsIOService.cpp +--- a/netwerk/base/nsIOService.cpp ++++ b/netwerk/base/nsIOService.cpp +@@ -830,17 +830,23 @@ nsIOService::NewChannelFromURIWithProxyF + consoleService->LogStringMessage(NS_LITERAL_STRING( + "Http channel implementation doesn't support nsIUploadChannel2. An extension has supplied a non-functional http protocol handler. This will break behavior and in future releases not work at all." + ).get()); + } + gHasWarnedUploadChannel2 = true; + } + } + ++#if defined(__aarch64__) ++ if (result) { ++ channel.forget(result); ++ } ++#else + channel.forget(result); ++#endif + return NS_OK; + } + + NS_IMETHODIMP + nsIOService::NewChannelFromURIWithProxyFlags2(nsIURI* aURI, + nsIURI* aProxyURI, + uint32_t aProxyFlags, + nsIDOMNode* aLoadingNode, diff --git a/mozilla-binutils-visibility.patch b/mozilla-binutils-visibility.patch deleted file mode 100644 index 6cb168c..0000000 --- a/mozilla-binutils-visibility.patch +++ /dev/null @@ -1,30 +0,0 @@ -# HG changeset patch -# User Wolfgang Rosenauer -# Parent 83bc32d997c714b607db1ffa71f02b30e1484a75 -From: NetBSD -Subject: Workaround for gcc/binutils combination in Leap 42.2 -References: -https://bugzilla.opensuse.org/show_bug.cgi?id=984637 - -diff --git a/xpcom/components/Module.h b/xpcom/components/Module.h ---- a/xpcom/components/Module.h -+++ b/xpcom/components/Module.h -@@ -120,17 +120,17 @@ struct Module - #if defined(MOZILLA_INTERNAL_API) - # define NSMODULE_NAME(_name) _name##_NSModule - # if defined(_MSC_VER) - # pragma section(".kPStaticModules$M", read) - # pragma comment(linker, "/merge:.kPStaticModules=.rdata") - # define NSMODULE_SECTION __declspec(allocate(".kPStaticModules$M"), dllexport) - # elif defined(__GNUC__) - # if defined(__ELF__) --# define NSMODULE_SECTION __attribute__((section(".kPStaticModules"), visibility("protected"))) -+# define NSMODULE_SECTION __attribute__((section(".kPStaticModules"), visibility("default"))) - # elif defined(__MACH__) - # define NSMODULE_SECTION __attribute__((section("__DATA, .kPStaticModules"), visibility("default"))) - # elif defined (_WIN32) - # define NSMODULE_SECTION __attribute__((section(".kPStaticModules"), dllexport)) - # endif - # endif - # if !defined(NSMODULE_SECTION) - # error Do not know how to define sections. diff --git a/mozilla-develdirs.patch b/mozilla-develdirs.patch index a077a9d..946bbb8 100644 --- a/mozilla-develdirs.patch +++ b/mozilla-develdirs.patch @@ -19,6 +19,6 @@ diff --git a/config/baseconfig.mk b/config/baseconfig.mk else DIST = $(DEPTH)/dist endif + ABS_DIST = $(topobjdir)/dist # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't - # manually use it before config.mk inclusion diff --git a/mozilla-flex_buffer_overrun.patch b/mozilla-flex_buffer_overrun.patch deleted file mode 100644 index 7dc3ebc..0000000 --- a/mozilla-flex_buffer_overrun.patch +++ /dev/null @@ -1,76 +0,0 @@ -# HG changeset patch -# Parent c8e8364b303892fdb5a574b96411d2d8f699a15e -Patch lexical parser files generated by flex which may be potentially -exploitable in a buffer overrun. These seem to come from an upstream projects -(CMU Sphinx and ANGLE) so it should be fixed there in the first place. - -CVE-2016-6354 - -https://bugzilla.suse.com/show_bug.cgi?id=990856 - -diff --git a/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp b/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp ---- a/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp -+++ b/gfx/angle/src/compiler/preprocessor/Tokenizer.cpp -@@ -1375,17 +1375,17 @@ static int yy_get_next_buffer (yyscan_t - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - -diff --git a/gfx/angle/src/compiler/translator/glslang_lex.cpp b/gfx/angle/src/compiler/translator/glslang_lex.cpp ---- a/gfx/angle/src/compiler/translator/glslang_lex.cpp -+++ b/gfx/angle/src/compiler/translator/glslang_lex.cpp -@@ -2269,17 +2269,17 @@ static int yy_get_next_buffer (yyscan_t - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - -diff --git a/media/sphinxbase/src/libsphinxbase/lm/jsgf_scanner.c b/media/sphinxbase/src/libsphinxbase/lm/jsgf_scanner.c ---- a/media/sphinxbase/src/libsphinxbase/lm/jsgf_scanner.c -+++ b/media/sphinxbase/src/libsphinxbase/lm/jsgf_scanner.c -@@ -1242,17 +1242,17 @@ static int yy_get_next_buffer (yyscan_t - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else - { -- yy_size_t num_to_read = -+ int num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - /* just a shorter name for the current buffer */ - YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; - diff --git a/mozilla-gcc6.patch b/mozilla-gcc6.patch deleted file mode 100644 index 56d2982..0000000 --- a/mozilla-gcc6.patch +++ /dev/null @@ -1,27 +0,0 @@ -diff -up firefox-44.0/nsprpub/config/make-system-wrappers.pl.back firefox-44.0/nsprpub/config/make-system-wrappers.pl ---- firefox-44.0/nsprpub/config/make-system-wrappers.pl.back 2016-01-24 00:23:49.000000000 +0100 -+++ firefox-44.0/nsprpub/config/make-system-wrappers.pl 2016-02-02 14:58:45.064112655 +0100 -@@ -19,7 +19,9 @@ while () { - open OUT, ">$output_dir/$_"; - print OUT "#pragma GCC system_header\n"; # suppress include_next warning - print OUT "#pragma GCC visibility push(default)\n"; -+ print OUT "#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS\n"; - print OUT "#include_next \<$_\>\n"; -+ print OUT "#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS\n"; - print OUT "#pragma GCC visibility pop\n"; - close OUT; - } -diff -up firefox-44.0/mozglue/build/arm.cpp.old firefox-44.0/mozglue/build/arm.cpp ---- firefox-44.0/mozglue/build/arm.cpp.old 2016-02-03 10:07:29.879526500 +0100 -+++ firefox-44.0/mozglue/build/arm.cpp 2016-02-03 10:08:11.062697517 +0100 -@@ -104,7 +104,9 @@ check_neon(void) - - # elif defined(__linux__) || defined(ANDROID) - # include -+#define _GLIBCXX_INCLUDE_NEXT_C_HEADERS - # include -+#undef _GLIBCXX_INCLUDE_NEXT_C_HEADERS - # include - - enum{ - diff --git a/mozilla-kde.patch b/mozilla-kde.patch index af162d7..8c83852 100644 --- a/mozilla-kde.patch +++ b/mozilla-kde.patch @@ -1,20 +1,16 @@ # HG changeset patch -# Parent 797d5f17b080f54439602f107ecaf6b09a0ef5c1 +# Parent 5c8ae59424f5318bf7a387257771bf95d3893063 Description: Add KDE integration to Firefox (toolkit parts) Author: Wolfgang Rosenauer Author: Lubos Lunak Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751 https://bugzilla.novell.com/show_bug.cgi?id=170055 -diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp ---- a/modules/libpref/Preferences.cpp -+++ b/modules/libpref/Preferences.cpp -@@ -30,16 +30,17 @@ - #include "nsIZipReader.h" - #include "nsPrefBranch.h" - #include "nsXPIDLString.h" - #include "nsCRT.h" - #include "nsCOMArray.h" +Index: mozilla/modules/libpref/Preferences.cpp +=================================================================== +--- mozilla.orig/modules/libpref/Preferences.cpp 2017-03-30 10:04:31.348433261 +0200 ++++ mozilla/modules/libpref/Preferences.cpp 2017-03-30 10:04:37.624487962 +0200 +@@ -36,6 +36,7 @@ #include "nsXPCOMCID.h" #include "nsAutoPtr.h" #include "nsPrintfCString.h" @@ -22,17 +18,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp #include "nsQuickSort.h" #include "PLDHashTable.h" - - #include "prefapi.h" - #include "prefread.h" - #include "prefapi_private_data.h" - -@@ -1136,16 +1137,34 @@ pref_LoadPrefsInDir(nsIFile* aDir, char - - static nsresult pref_LoadPrefsInDirList(const char *listId) - { - nsresult rv; - nsCOMPtr dirSvc(do_GetService(NS_DIRECTORY_SERVICE_CONTRACTID, &rv)); +@@ -1179,6 +1180,24 @@ static nsresult pref_LoadPrefsInDirList( if (NS_FAILED(rv)) return rv; @@ -57,17 +43,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp nsCOMPtr list; dirSvc->Get(listId, NS_GET_IID(nsISimpleEnumerator), - getter_AddRefs(list)); - if (!list) - return NS_OK; - - bool hasMore; -@@ -1161,17 +1180,17 @@ static nsresult pref_LoadPrefsInDirList( - - nsAutoCString leaf; - path->GetNativeLeafName(leaf); - - // Do we care if a file provided by this process fails to load? +@@ -1204,7 +1223,7 @@ static nsresult pref_LoadPrefsInDirList( if (Substring(leaf, leaf.Length() - 4).EqualsLiteral(".xpi")) ReadExtensionPrefs(path); else @@ -76,28 +52,15 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp } return NS_OK; } - - static nsresult pref_ReadPrefFromJar(nsZipArchive* jarReader, const char *name) - { - nsZipItemPtr manifest(jarReader, name, true); - NS_ENSURE_TRUE(manifest.Buffer(), NS_ERROR_NOT_AVAILABLE); -@@ -1265,26 +1284,38 @@ static nsresult pref_InitInitialObjects( - /* these pref file names should not be used: we process them after all other application pref files for backwards compatibility */ - static const char* specialFiles[] = { - #if defined(XP_MACOSX) - "macprefs.js" - #elif defined(XP_WIN) +@@ -1308,6 +1327,7 @@ static nsresult pref_InitInitialObjects( "winpref.js" #elif defined(XP_UNIX) "unix.js" + , "" // placeholder for KDE (empty is otherwise harmless) - #if defined(VMS) - , "openvms.js" - #elif defined(_AIX) + #if defined(_AIX) , "aix.js" #endif - #elif defined(XP_BEOS) - "beos.js" +@@ -1316,6 +1336,17 @@ static nsresult pref_InitInitialObjects( #endif }; @@ -115,20 +78,11 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles, ArrayLength(specialFiles)); if (NS_FAILED(rv)) NS_WARNING("Error parsing application default preferences."); - - // Load jar:$app/omni.jar!/defaults/preferences/*.js - // or jar:$gre/omni.jar!/defaults/preferences/*.js. - RefPtr appJarReader = mozilla::Omnijar::GetReader(mozilla::Omnijar::APP); - // GetReader(mozilla::Omnijar::APP) returns null when $app == $gre, in which -diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build ---- a/modules/libpref/moz.build -+++ b/modules/libpref/moz.build -@@ -31,16 +31,20 @@ UNIFIED_SOURCES += [ - 'prefread.cpp', - ] - - # prefapi.cpp cannot be built in unified mode because it uses plarena.h - SOURCES += [ +Index: mozilla/modules/libpref/moz.build +=================================================================== +--- mozilla.orig/modules/libpref/moz.build 2017-03-30 10:04:31.348433261 +0200 ++++ mozilla/modules/libpref/moz.build 2017-03-30 10:04:37.624487962 +0200 +@@ -36,6 +36,10 @@ SOURCES += [ 'prefapi.cpp', ] @@ -139,20 +93,11 @@ diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build include('/ipc/chromium/chromium-config.mozbuild') FINAL_LIBRARY = 'xul' - - DEFINES['OS_ARCH'] = CONFIG['OS_ARCH'] - DEFINES['MOZ_WIDGET_TOOLKIT'] = CONFIG['MOZ_WIDGET_TOOLKIT'] - - if CONFIG['GNU_CXX']: -diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py ---- a/python/mozbuild/mozpack/chrome/flags.py -+++ b/python/mozbuild/mozpack/chrome/flags.py -@@ -211,16 +211,17 @@ class Flags(OrderedDict): - 'contentaccessible': Flag, - 'os': StringFlag, - 'osversion': VersionFlag, - 'abi': StringFlag, - 'platform': Flag, +Index: mozilla/python/mozbuild/mozpack/chrome/flags.py +=================================================================== +--- mozilla.orig/python/mozbuild/mozpack/chrome/flags.py 2017-03-30 10:04:31.348433261 +0200 ++++ mozilla/python/mozbuild/mozpack/chrome/flags.py 2017-03-30 10:04:37.628487997 +0200 +@@ -216,6 +216,7 @@ class Flags(OrderedDict): 'xpcnativewrappers': Flag, 'tablet': Flag, 'process': StringFlag, @@ -160,20 +105,11 @@ diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/c } RE = re.compile(r'([!<>=]+)') - def __init__(self, *flags): - ''' - Initialize a set of flags given in string form. - flags = Flags('contentaccessible=yes', 'appversion>=3.5') - ''' -diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpack/chrome/manifest.py ---- a/python/mozbuild/mozpack/chrome/manifest.py -+++ b/python/mozbuild/mozpack/chrome/manifest.py -@@ -33,16 +33,17 @@ class ManifestEntry(object): - 'application', - 'platformversion', - 'os', - 'osversion', - 'abi', +Index: mozilla/python/mozbuild/mozpack/chrome/manifest.py +=================================================================== +--- mozilla.orig/python/mozbuild/mozpack/chrome/manifest.py 2017-03-30 10:04:31.348433261 +0200 ++++ mozilla/python/mozbuild/mozpack/chrome/manifest.py 2017-03-30 10:04:37.628487997 +0200 +@@ -38,6 +38,7 @@ class ManifestEntry(object): 'xpcnativewrappers', 'tablet', 'process', @@ -181,41 +117,23 @@ diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpac ] def __init__(self, base, *flags): - ''' - Initialize a manifest entry with the given base path and flags. - ''' - self.base = base - self.flags = Flags(*flags) -diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloads/moz.build ---- a/toolkit/components/downloads/moz.build -+++ b/toolkit/components/downloads/moz.build -@@ -65,15 +65,16 @@ if not CONFIG['MOZ_SUITE']: - 'nsDownloadManagerUI.js', - 'nsDownloadManagerUI.manifest', - ] - - FINAL_LIBRARY = 'xul' - +Index: mozilla/toolkit/components/downloads/moz.build +=================================================================== +--- mozilla.orig/toolkit/components/downloads/moz.build 2017-03-30 10:04:31.348433261 +0200 ++++ mozilla/toolkit/components/downloads/moz.build 2017-03-30 10:04:37.628487997 +0200 +@@ -62,6 +62,7 @@ FINAL_LIBRARY = 'xul' LOCAL_INCLUDES += [ '../protobuf', -- '/ipc/chromium/src' -+ '/ipc/chromium/src', -+ '/toolkit/xre' + '/ipc/chromium/src', ++ '/toolkit/xre', + 'chromium' ] - DEFINES['GOOGLE_PROTOBUF_NO_RTTI'] = True - DEFINES['GOOGLE_PROTOBUF_NO_STATIC_INITIALIZER'] = True - - CXXFLAGS += CONFIG['TK_CFLAGS'] -diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/components/downloads/nsDownloadManager.cpp ---- a/toolkit/components/downloads/nsDownloadManager.cpp -+++ b/toolkit/components/downloads/nsDownloadManager.cpp -@@ -51,16 +51,20 @@ - #ifdef XP_WIN - #include - #include "nsWindowsHelpers.h" - #ifdef DOWNLOAD_SCANNER - #include "nsDownloadScanner.h" +Index: mozilla/toolkit/components/downloads/nsDownloadManager.cpp +=================================================================== +--- mozilla.orig/toolkit/components/downloads/nsDownloadManager.cpp 2017-03-30 10:04:31.352433296 +0200 ++++ mozilla/toolkit/components/downloads/nsDownloadManager.cpp 2017-03-30 10:04:37.628487997 +0200 +@@ -57,6 +57,10 @@ #endif #endif @@ -226,17 +144,7 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/compon #ifdef XP_MACOSX #include #endif - - #ifdef MOZ_WIDGET_ANDROID - #include "AndroidBridge.h" - #endif - -@@ -2719,16 +2723,25 @@ nsDownload::SetState(DownloadState aStat - nsCOMPtr pref(do_GetService(NS_PREFSERVICE_CONTRACTID)); - - // Master pref to control this function. - bool showTaskbarAlert = true; - if (pref) +@@ -2728,6 +2732,15 @@ nsDownload::SetState(DownloadState aStat pref->GetBoolPref(PREF_BDM_SHOWALERTONCOMPLETE, &showTaskbarAlert); if (showTaskbarAlert) { @@ -252,17 +160,7 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/compon int32_t alertInterval = 2000; if (pref) pref->GetIntPref(PREF_BDM_SHOWALERTINTERVAL, &alertInterval); - - int64_t alertIntervalUSec = alertInterval * PR_USEC_PER_MSEC; - int64_t goat = PR_Now() - mStartTime; - showTaskbarAlert = goat > alertIntervalUSec; - -@@ -2759,16 +2772,17 @@ nsDownload::SetState(DownloadState aStat - NS_LITERAL_STRING(DOWNLOAD_MANAGER_ALERT_ICON), title, - message, !removeWhenDone, - mPrivate ? NS_LITERAL_STRING("private") : NS_LITERAL_STRING("non-private"), - mDownloadManager, EmptyString(), NS_LITERAL_STRING("auto"), - EmptyString(), EmptyString(), nullptr, mPrivate); +@@ -2769,6 +2782,7 @@ nsDownload::SetState(DownloadState aStat } } } @@ -270,53 +168,33 @@ diff --git a/toolkit/components/downloads/nsDownloadManager.cpp b/toolkit/compon #if defined(XP_WIN) || defined(XP_MACOSX) || defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_GTK) nsCOMPtr fileURL = do_QueryInterface(mTarget); - nsCOMPtr file; - nsAutoString path; - - if (fileURL && - NS_SUCCEEDED(fileURL->GetFile(getter_AddRefs(file))) && -diff --git a/toolkit/content/jar.mn b/toolkit/content/jar.mn ---- a/toolkit/content/jar.mn -+++ b/toolkit/content/jar.mn -@@ -64,29 +64,33 @@ toolkit.jar: - content/global/viewZoomOverlay.js - *+ content/global/bindings/autocomplete.xml (widgets/autocomplete.xml) - content/global/bindings/browser.xml (widgets/browser.xml) - content/global/bindings/button.xml (widgets/button.xml) - content/global/bindings/checkbox.xml (widgets/checkbox.xml) - content/global/bindings/colorpicker.xml (widgets/colorpicker.xml) - content/global/bindings/datetimepicker.xml (widgets/datetimepicker.xml) - *+ content/global/bindings/dialog.xml (widgets/dialog.xml) -+*+ content/global/bindings/dialog-kde.xml (widgets/dialog-kde.xml) +Index: mozilla/toolkit/content/jar.mn +=================================================================== +--- mozilla.orig/toolkit/content/jar.mn 2017-03-30 09:15:54.406803350 +0200 ++++ mozilla/toolkit/content/jar.mn 2017-03-30 10:06:07.401270868 +0200 +@@ -75,6 +75,8 @@ toolkit.jar: + content/global/bindings/datetimebox.xml (widgets/datetimebox.xml) + content/global/bindings/datetimebox.css (widgets/datetimebox.css) + * content/global/bindings/dialog.xml (widgets/dialog.xml) ++* content/global/bindings/dialog-kde.xml (widgets/dialog-kde.xml) +% override chrome://global/content/bindings/dialog.xml chrome://global/content/bindings/dialog-kde.xml desktop=kde content/global/bindings/editor.xml (widgets/editor.xml) content/global/bindings/expander.xml (widgets/expander.xml) - * content/global/bindings/filefield.xml (widgets/filefield.xml) - *+ content/global/bindings/findbar.xml (widgets/findbar.xml) - content/global/bindings/general.xml (widgets/general.xml) - content/global/bindings/groupbox.xml (widgets/groupbox.xml) - *+ content/global/bindings/listbox.xml (widgets/listbox.xml) - content/global/bindings/menu.xml (widgets/menu.xml) - content/global/bindings/menulist.xml (widgets/menulist.xml) - content/global/bindings/notification.xml (widgets/notification.xml) + content/global/bindings/filefield.xml (widgets/filefield.xml) +@@ -88,6 +90,8 @@ toolkit.jar: content/global/bindings/numberbox.xml (widgets/numberbox.xml) content/global/bindings/popup.xml (widgets/popup.xml) - *+ content/global/bindings/preferences.xml (widgets/preferences.xml) -+*+ content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml) + * content/global/bindings/preferences.xml (widgets/preferences.xml) ++* content/global/bindings/preferences-kde.xml (widgets/preferences-kde.xml) +% override chrome://global/content/bindings/preferences.xml chrome://global/content/bindings/preferences-kde.xml desktop=kde content/global/bindings/progressmeter.xml (widgets/progressmeter.xml) content/global/bindings/radio.xml (widgets/radio.xml) content/global/bindings/remote-browser.xml (widgets/remote-browser.xml) - content/global/bindings/resizer.xml (widgets/resizer.xml) - content/global/bindings/richlistbox.xml (widgets/richlistbox.xml) - content/global/bindings/scale.xml (widgets/scale.xml) - content/global/bindings/scrollbar.xml (widgets/scrollbar.xml) - content/global/bindings/scrollbox.xml (widgets/scrollbox.xml) -diff --git a/toolkit/content/widgets/dialog-kde.xml b/toolkit/content/widgets/dialog-kde.xml -new file mode 100644 ---- /dev/null -+++ b/toolkit/content/widgets/dialog-kde.xml -@@ -0,0 +1,460 @@ +Index: mozilla/toolkit/content/widgets/dialog-kde.xml +=================================================================== +--- /dev/null 1970-01-01 00:00:00.000000000 +0000 ++++ mozilla/toolkit/content/widgets/dialog-kde.xml 2017-03-30 10:04:37.628487997 +0200 +@@ -0,0 +1,457 @@ + +