Version in base suite: 115.7.0-1~deb12u1 Version in overlay suite: 115.8.0-1~deb12u1 Base version: thunderbird_115.8.0-1~deb12u1 Target version: thunderbird_115.9.0-1~deb12u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/t/thunderbird/thunderbird_115.8.0-1~deb12u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/t/thunderbird/thunderbird_115.9.0-1~deb12u1.dsc /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/config/external/icu/data/icudt73l.dat |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/metaZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/timezoneTypes.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/windowsZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/zoneinfo64.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/metaZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/timezoneTypes.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/windowsZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/zoneinfo64.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/metaZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/timezoneTypes.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/windowsZones.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/zoneinfo64.res |binary /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/services/settings/dumps/blocklists/addons-bloomfilters/addons-mlbf.bin |binary thunderbird-115.9.0/CLOBBER | 2 thunderbird-115.9.0/Cargo.lock | 12 thunderbird-115.9.0/browser/base/content/browser-fullScreenAndPointerLock.js | 13 thunderbird-115.9.0/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js | 101 thunderbird-115.9.0/browser/components/search/schema/search-telemetry-schema.json | 95 thunderbird-115.9.0/browser/config/version.txt | 2 thunderbird-115.9.0/browser/config/version_display.txt | 2 thunderbird-115.9.0/build/workspace-hack/Cargo.toml | 1 thunderbird-115.9.0/comm/.gecko_rev.yml | 4 thunderbird-115.9.0/comm/mail/base/content/about3Pane.js | 7 thunderbird-115.9.0/comm/mail/base/content/widgets/tabmail-tab.js | 3 thunderbird-115.9.0/comm/mail/base/test/browser/browser_browserContext.js | 2 thunderbird-115.9.0/comm/mail/base/test/browser/browser_formPickers.js | 2 thunderbird-115.9.0/comm/mail/base/test/browser/browser_interactionTelemetry.js | 239 thunderbird-115.9.0/comm/mail/base/test/browser/head.js | 33 thunderbird-115.9.0/comm/mail/components/MailGlue.jsm | 10 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/adr.mjs | 1 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/edit.mjs | 4 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/email.mjs | 1 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/tel.mjs | 5 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/url.mjs | 10 thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/vCardTemplates.inc.xhtml | 88 thunderbird-115.9.0/comm/mail/components/compose/content/MsgComposeCommands.js | 38 thunderbird-115.9.0/comm/mail/components/compose/content/editorUtilities.js | 2 thunderbird-115.9.0/comm/mail/components/compose/content/messengercompose.xhtml | 20 thunderbird-115.9.0/comm/mail/components/preferences/general.js | 7 thunderbird-115.9.0/comm/mail/components/telemetry/Scalars.yaml | 32 thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/customizable-element.mjs | 4 thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/unified-toolbar.mjs | 5 thunderbird-115.9.0/comm/mail/config/version.txt | 2 thunderbird-115.9.0/comm/mail/config/version_display.txt | 2 thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/RNP.jsm | 24 thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/keyserver.jsm | 8 thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/persistentCrypto.jsm | 19 thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js | 2 thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js | 62 thunderbird-115.9.0/comm/mail/modules/MailUsageTelemetry.jsm | 80 thunderbird-115.9.0/comm/mail/test/browser/composition/browser_focus.js | 14 thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser.ini | 1 thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser_upload.js | 97 thunderbird-115.9.0/comm/mail/themes/shared/mail/about3Pane.css | 6 thunderbird-115.9.0/comm/mail/themes/shared/mail/messenger.css | 4 thunderbird-115.9.0/comm/mail/themes/shared/mail/unifiedToolbar.css | 1 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.cpp | 63 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.h | 12 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupView.cpp | 37 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgSearchDBView.cpp | 21 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.cpp | 16 thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.h | 2 thunderbird-115.9.0/comm/mailnews/base/test/unit/test_accountMgr2.js | 2 thunderbird-115.9.0/comm/mailnews/compose/src/SmtpClient.jsm | 63 thunderbird-115.9.0/comm/mailnews/compose/src/SmtpServer.jsm | 29 thunderbird-115.9.0/comm/mailnews/compose/src/SmtpService.jsm | 2 thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgDatabase.cpp | 27 thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgThread.cpp | 5 thunderbird-115.9.0/comm/mailnews/extensions/smime/nsMsgComposeSecure.cpp | 13 thunderbird-115.9.0/comm/mailnews/local/public/nsIPop3Sink.idl | 2 thunderbird-115.9.0/comm/mailnews/local/src/Pop3Client.jsm | 1 thunderbird-115.9.0/comm/mailnews/local/src/nsPop3Sink.cpp | 2 thunderbird-115.9.0/comm/mailnews/mailnews.js | 13 thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt.js | 4 thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt_allow_sha1.js | 4 thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_perm_decrypt.js | 32 thunderbird-115.9.0/comm/mailnews/search/content/searchWidgets.js | 2 thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/org.mozilla.Thunderbird.appdata.xml.in | 8 thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/runme.sh | 1 thunderbird-115.9.0/config/milestone.txt | 2 thunderbird-115.9.0/debian/changelog | 34 thunderbird-115.9.0/dom/base/nsContentUtils.cpp | 102 thunderbird-115.9.0/dom/indexedDB/SafeRefPtr.h | 3 thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.cpp | 27 thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.h | 2 thunderbird-115.9.0/gfx/thebes/SharedFontList.cpp | 35 thunderbird-115.9.0/gfx/thebes/SharedFontList.h | 3 thunderbird-115.9.0/gfx/thebes/gfxUserFontSet.cpp | 13 thunderbird-115.9.0/intl/tzdata/GIT-INFO | 6 thunderbird-115.9.0/intl/tzdata/VERSION | 2 thunderbird-115.9.0/intl/tzdata/source/metaZones.txt | 143 thunderbird-115.9.0/intl/tzdata/source/timezoneTypes.txt | 56 thunderbird-115.9.0/intl/tzdata/source/windowsZones.txt | 30 thunderbird-115.9.0/intl/tzdata/source/zoneinfo64.txt | 76 thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.cpp | 11 thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.h | 1 thunderbird-115.9.0/js/src/builtin/intl/TimeZoneDataGenerated.h | 13 thunderbird-115.9.0/js/src/jit/arm/MacroAssembler-arm.cpp | 24 thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js | 2 thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js | 3 thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js | 2 thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js | 2 thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js | 4 thunderbird-115.9.0/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js | 2 thunderbird-115.9.0/layout/generic/test/file_bug514732_window.xhtml | 17 thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001-ref.html | 2 thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001.html | 2 thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-010-ref.html | 2 thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-010.html | 2 thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-011.html | 2 thunderbird-115.9.0/layout/style/FontFaceImpl.cpp | 8 thunderbird-115.9.0/layout/tables/nsTableCellFrame.cpp | 6 thunderbird-115.9.0/mozglue/misc/RuntimeExceptionModule.cpp | 18 thunderbird-115.9.0/netwerk/dns/effective_tld_names.dat | 111 thunderbird-115.9.0/netwerk/protocol/http/Http2Compression.cpp | 33 thunderbird-115.9.0/netwerk/protocol/http/Http2Compression.h | 9 thunderbird-115.9.0/netwerk/protocol/http/HttpChannelChild.cpp | 49 thunderbird-115.9.0/netwerk/protocol/http/HttpChannelChild.h | 10 thunderbird-115.9.0/netwerk/protocol/http/TlsHandshaker.cpp | 18 thunderbird-115.9.0/netwerk/protocol/http/nsITlsHandshakeListener.idl | 2 thunderbird-115.9.0/netwerk/test/unit/test_client_auth_with_proxy.js | 185 thunderbird-115.9.0/netwerk/test/unit/xpcshell.ini | 2 thunderbird-115.9.0/parser/html/nsHtml5TreeOperation.cpp | 3 thunderbird-115.9.0/python/sites/wpt.txt | 2 thunderbird-115.9.0/security/manager/ssl/NSSSocketControl.cpp | 15 thunderbird-115.9.0/security/manager/ssl/StaticHPKPins.h | 2 thunderbird-115.9.0/security/manager/ssl/nsSTSPreloadList.inc | 3968 +++++----- thunderbird-115.9.0/security/nss/TAG-INFO | 2 thunderbird-115.9.0/security/nss/coreconf/coreconf.dep | 1 thunderbird-115.9.0/security/nss/doc/rst/releases/nss_3_90_2.rst | 56 thunderbird-115.9.0/security/nss/lib/freebl/mpi/mpi-priv.h | 3 thunderbird-115.9.0/security/nss/lib/freebl/mpi/mpi.c | 300 thunderbird-115.9.0/security/nss/lib/freebl/mpi/mpi.h | 41 thunderbird-115.9.0/security/nss/lib/freebl/mpi/mpmontg.c | 29 thunderbird-115.9.0/security/nss/lib/freebl/rsa.c | 16 thunderbird-115.9.0/security/nss/lib/nss/nss.h | 4 thunderbird-115.9.0/security/nss/lib/softoken/softkver.h | 4 thunderbird-115.9.0/security/nss/lib/ssl/sslsecur.c | 7 thunderbird-115.9.0/security/nss/lib/util/nssutil.h | 4 thunderbird-115.9.0/services/settings/dumps/blocklists/addons-bloomfilters.json | 3604 --------- thunderbird-115.9.0/services/settings/dumps/blocklists/addons-bloomfilters/addons-mlbf.bin.meta.json | 2 thunderbird-115.9.0/services/settings/dumps/main/cookie-banner-rules-list.json | 1141 +- thunderbird-115.9.0/services/settings/dumps/main/devtools-compatibility-browsers.json | 308 thunderbird-115.9.0/services/settings/dumps/main/search-config.json | 421 - thunderbird-115.9.0/services/settings/dumps/main/search-telemetry-v2.json | 75 thunderbird-115.9.0/services/settings/dumps/security-state/intermediates.json | 704 + thunderbird-115.9.0/services/settings/dumps/security-state/onecrl.json | 17 thunderbird-115.9.0/sourcestamp.txt | 6 thunderbird-115.9.0/testing/tools/websocketprocessbridge/websocketprocessbridge_requirements_3.txt | 4 thunderbird-115.9.0/testing/web-platform/tests/html/canvas/offscreen/manual/the-offscreen-canvas/offscreencanvas-worker-font-load-crash.html | 19 thunderbird-115.9.0/testing/web-platform/tests/tools/webtransport/requirements.txt | 2 thunderbird-115.9.0/testing/web-platform/tests/tools/wptrunner/requirements_chromium.txt | 2 thunderbird-115.9.0/third_party/dav1d/src/decode.c | 13 thunderbird-115.9.0/third_party/dav1d/src/internal.h | 2 thunderbird-115.9.0/thunderbird-l10n/af/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ar/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ast/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/be/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/bg/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/br/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ca/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/cak/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/cs/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/cy/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/da/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/de/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/dsb/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/el/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/en-CA/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/en-GB/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/es-AR/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/es-ES/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/es-MX/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/et/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/eu/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/fi/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/fr/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/fy-NL/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ga-IE/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/gd/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/gl/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/he/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/hr/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/hsb/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/hu/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/hy-AM/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/id/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/is/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/it/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ja/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ka/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/kab/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/kk/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ko/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/lt/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/lv/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ms/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/nb-NO/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/nl/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/nn-NO/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/pa-IN/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/pl/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/pt-BR/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/pt-PT/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/rm/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ro/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/ru/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/sk/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/sl/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/sq/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/sr/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/sv-SE/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/th/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/tr/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/uk/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/uz/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/vi/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/zh-CN/manifest.json | 4 thunderbird-115.9.0/thunderbird-l10n/zh-TW/manifest.json | 4 thunderbird-115.9.0/toolkit/components/search/tests/xpcshell/searchconfigs/test_amazon.js | 298 thunderbird-115.9.0/toolkit/components/search/tests/xpcshell/searchconfigs/test_distributions.js | 8 thunderbird-115.9.0/toolkit/crashreporter/client/crashreporter.cpp | 31 thunderbird-115.9.0/toolkit/crashreporter/client/moz.build | 1 thunderbird-115.9.0/toolkit/crashreporter/docs/index.rst | 5 thunderbird-115.9.0/toolkit/crashreporter/mozwer-rust/Cargo.toml | 1 thunderbird-115.9.0/toolkit/crashreporter/mozwer-rust/lib.rs | 315 thunderbird-115.9.0/toolkit/crashreporter/mozwer-rust/moz.build | 1 thunderbird-115.9.0/toolkit/crashreporter/nsExceptionHandler.cpp | 27 thunderbird-115.9.0/toolkit/crashreporter/nsExceptionHandler.h | 13 thunderbird-115.9.0/toolkit/crashreporter/process_reader/Cargo.toml | 18 thunderbird-115.9.0/toolkit/crashreporter/process_reader/src/error.rs | 30 thunderbird-115.9.0/toolkit/crashreporter/process_reader/src/lib.rs | 13 thunderbird-115.9.0/toolkit/crashreporter/process_reader/src/process_reader.rs | 6 thunderbird-115.9.0/toolkit/crashreporter/process_reader/src/process_reader/windows.rs | 226 thunderbird-115.9.0/toolkit/modules/PopupNotifications.sys.mjs | 17 thunderbird-115.9.0/toolkit/xre/nsEmbedFunctions.cpp | 7 thunderbird-115.9.0/widget/cocoa/MOZMenuOpeningCoordinator.mm | 3 thunderbird-115.9.0/widget/nsBaseDragService.cpp | 1 thunderbird-115.9.0/xpcom/build/XPCOMInit.cpp | 12 240 files changed, 6663 insertions(+), 7911 deletions(-) diff -Nru thunderbird-115.8.0/CLOBBER thunderbird-115.9.0/CLOBBER --- thunderbird-115.8.0/CLOBBER 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/CLOBBER 2024-03-15 16:02:31.000000000 +0000 @@ -22,4 +22,4 @@ # changes to stick? As of bug 928195, this shouldn't be necessary! Please # don't change CLOBBER for WebIDL changes any more. -Merge day clobber 2024-01-22 \ No newline at end of file +Merge day clobber 2024-02-19 \ No newline at end of file diff -Nru thunderbird-115.8.0/Cargo.lock thunderbird-115.9.0/Cargo.lock --- thunderbird-115.8.0/Cargo.lock 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/Cargo.lock 2024-03-15 16:02:31.000000000 +0000 @@ -3454,6 +3454,7 @@ dependencies = [ "libc", "mozilla-central-workspace-hack", + "process_reader", "rust-ini", "serde", "serde_json", @@ -4185,6 +4186,17 @@ ] [[package]] +name = "process_reader" +version = "0.1.0" +dependencies = [ + "goblin", + "memoffset", + "mozilla-central-workspace-hack", + "thiserror", + "winapi", +] + +[[package]] name = "processtools" version = "0.1.0" dependencies = [ diff -Nru thunderbird-115.8.0/browser/base/content/browser-fullScreenAndPointerLock.js thunderbird-115.9.0/browser/base/content/browser-fullScreenAndPointerLock.js --- thunderbird-115.8.0/browser/base/content/browser-fullScreenAndPointerLock.js 2024-02-16 23:38:24.000000000 +0000 +++ thunderbird-115.9.0/browser/base/content/browser-fullScreenAndPointerLock.js 2024-03-15 16:02:31.000000000 +0000 @@ -275,11 +275,24 @@ }; var PointerLock = { + _isActive: false, + + /** + * @returns {boolean} - true if pointer lock is currently active for the + * associated window. + */ + get isActive() { + return this._isActive; + }, + entered(originNoSuffix) { + this._isActive = true; + Services.obs.notifyObservers(null, "pointer-lock-entered"); PointerlockFsWarning.showPointerLock(originNoSuffix); }, exited() { + this._isActive = false; PointerlockFsWarning.close("pointerlock-warning"); }, }; diff -Nru thunderbird-115.8.0/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js thunderbird-115.9.0/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js --- thunderbird-115.8.0/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js 2024-02-16 23:38:24.000000000 +0000 +++ thunderbird-115.9.0/browser/base/content/test/popupNotifications/browser_popupNotification_security_delay.js 2024-03-15 16:02:31.000000000 +0000 @@ -294,3 +294,104 @@ "Should not longer see the notification." ); }); + +/** + * Tests that the security delay gets reset when a window is repositioned and + * the PopupNotifications panel position is updated. + */ +add_task(async function test_notificationWindowMove() { + await ensureSecurityDelayReady(); + + info("Open a notification."); + let popupShownPromise = waitForNotificationPanel(); + showNotification(); + await popupShownPromise; + ok( + PopupNotifications.isPanelOpen, + "PopupNotification should be open after show call." + ); + + // Test that the initial security delay works. + info("Trigger main action via button click during the new security delay."); + triggerMainCommand(PopupNotifications.panel); + + await new Promise(resolve => setTimeout(resolve, 0)); + + ok(PopupNotifications.isPanelOpen, "PopupNotification should still be open."); + let notification = PopupNotifications.getNotification( + "foo", + gBrowser.selectedBrowser + ); + ok( + notification, + "Notification should still be open because we clicked during the security delay." + ); + // If the notification is no longer shown (test failure) skip the remaining + // checks. + if (!notification) { + return; + } + + info("Wait for security delay to expire."); + await new Promise(resolve => + // eslint-disable-next-line mozilla/no-arbitrary-setTimeout + setTimeout(resolve, TEST_SECURITY_DELAY + 500) + ); + + info("Reposition the window"); + // Remember original window position. + let { screenX, screenY } = window; + + let promisePopupPositioned = BrowserTestUtils.waitForEvent( + PopupNotifications.panel, + "popuppositioned" + ); + + // Move the window. + window.moveTo(200, 200); + + // Wait for the panel to reposition and the PopupNotifications listener to run. + await promisePopupPositioned; + await new Promise(resolve => setTimeout(resolve, 0)); + + info("Trigger main action via button click during the new security delay."); + triggerMainCommand(PopupNotifications.panel); + + await new Promise(resolve => setTimeout(resolve, 0)); + + ok(PopupNotifications.isPanelOpen, "PopupNotification should still be open."); + notification = PopupNotifications.getNotification( + "foo", + gBrowser.selectedBrowser + ); + ok( + notification, + "Notification should still be open because we clicked during the security delay." + ); + // If the notification is no longer shown (test failure) skip the remaining + // checks. + if (!notification) { + return; + } + + // Ensure that once the security delay has passed the notification can be + // closed again. + let fakeTimeShown = TEST_SECURITY_DELAY + 500; + info(`Manually set timeShown to ${fakeTimeShown}ms in the past.`); + notification.timeShown = performance.now() - fakeTimeShown; + + info("Trigger main action via button click outside security delay"); + let notificationHiddenPromise = waitForNotificationPanelHidden(); + triggerMainCommand(PopupNotifications.panel); + + info("Wait for panel to be hidden."); + await notificationHiddenPromise; + + ok( + !PopupNotifications.getNotification("foo", gBrowser.selectedBrowser), + "Should not longer see the notification." + ); + + // Reset window position + window.moveTo(screenX, screenY); +}); diff -Nru thunderbird-115.8.0/browser/components/search/schema/search-telemetry-schema.json thunderbird-115.9.0/browser/components/search/schema/search-telemetry-schema.json --- thunderbird-115.8.0/browser/components/search/schema/search-telemetry-schema.json 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/browser/components/search/schema/search-telemetry-schema.json 2024-03-15 16:02:32.000000000 +0000 @@ -130,17 +130,9 @@ "type": "object", "properties": { "type": { - "enum": [ - "ad_carousel", - "ad_image_row", - "ad_link", - "ad_sitelink", - "ad_sidebar", - "incontent_searchbox", - "refined_search_buttons", - "shopping_tab" - ], - "description": "The type of component the anchor or DOM element should belong to." + "type": "string", + "description": "The type of component the anchor or DOM element should belong to.", + "pattern": "^[a-z](?:_?[a-z])*$" }, "included": { "type": "object", @@ -154,6 +146,12 @@ "selector": { "description": "If topDown is true for this component, then this will be the value used in querySelectorAll(). Otherwise, it will be the value to in closest() from the context of an anchor.", "type": "string" + }, + "eventListeners": { + "$ref": "#/definitions/eventListeners" + }, + "skipCount": { + "$ref": "#/definitions/skipCount" } }, "required": ["selector"] @@ -170,21 +168,19 @@ "description": "The selector to use querySelectorAll from the context of the parent." }, "type": { - "enum": [ - "ad_carousel", - "ad_image_row", - "ad_link", - "ad_sitelink", - "ad_sidebar", - "incontent_searchbox", - "refined_search_buttons", - "shopping_tab" - ], - "description": "The component type to use if this child is present." + "type": "string", + "description": "The component type to use if this child is present.", + "pattern": "^[a-z](?:_?[a-z])*$" }, "countChildren": { "type": "boolean", "description": "Whether we should count all instances of the child element instead of anchor links found inside of the parent. Defaults to false." + }, + "eventListeners": { + "$ref": "#/definitions/eventListeners" + }, + "skipCount": { + "$ref": "#/definitions/skipCount" } }, "required": ["selector"] @@ -233,6 +229,15 @@ } } }, + "ignoreLinkRegexps": { + "type": "array", + "title": "Ignore links matching regular expressions", + "description": "Regular expressions matching links that should be ignored by the network observer.", + "items": { + "type": "string", + "description": "The matching regular expression." + } + }, "nonAdsLinkRegexps": { "type": "array", "title": "Non-ads link matching regular expressions", @@ -270,22 +275,55 @@ "type": "array", "description": "An array of methods for extracting domains from ads.", "items": { - "$ref": "/schemas/extraction" + "$ref": "#/definitions/extraction" } }, "nonAds": { "type": "array", "description": "An array of methods for extracting domains from non-ads.", "items": { - "$ref": "/schemas/extraction" + "$ref": "#/definitions/extraction" } } } } }, - "$defs": { + "definitions": { + "eventListener": { + "title": "Event Listener", + "type": "object", + "description": "Event listeners attached to a component.", + "properties": { + "eventType": { + "title": "Event Type", + "description": "The type of event to listen for. Custom events, especially those with special logic like keydownEnter, can be used if the Desktop code has been updated.", + "type": "string", + "pattern": "^[a-z][A-Za-z]*$" + }, + "target": { + "title": "Target", + "description": "The component type to report when the event is triggered. Uses the child component type (if exists), otherwise uses the parent component type.", + "type": "string", + "pattern": "^[a-z](?:_?[a-z])*$" + }, + "action": { + "title": "Action", + "description": "The action to report when the event is triggered. If the event type is 'click', defaults to clicked. Otherwise, this should be provided.", + "type": "string", + "pattern": "^[a-z](?:_?[a-z])*$" + } + }, + "required": ["eventType"] + }, + "eventListeners": { + "title": "Event Listeners", + "description": "An array of Event Listeners to apply to elements.", + "type": "array", + "items": { + "$ref": "#/definitions/eventListener" + } + }, "extraction": { - "$id": "/schemas/extraction", "anyOf": [ { "type": "object", @@ -337,5 +375,10 @@ } ] } + }, + "skipCount": { + "title": "Skip Count", + "description": "Whether to skip reporting of the count of these elements to ad_impressions. Defaults to false.", + "type": "boolean" } } diff -Nru thunderbird-115.8.0/browser/config/version.txt thunderbird-115.9.0/browser/config/version.txt --- thunderbird-115.8.0/browser/config/version.txt 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/browser/config/version.txt 2024-03-15 16:02:32.000000000 +0000 @@ -1 +1 @@ -115.8.0 +115.9.0 diff -Nru thunderbird-115.8.0/browser/config/version_display.txt thunderbird-115.9.0/browser/config/version_display.txt --- thunderbird-115.8.0/browser/config/version_display.txt 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/browser/config/version_display.txt 2024-03-15 16:02:32.000000000 +0000 @@ -1 +1 @@ -115.8.0esr +115.9.0esr diff -Nru thunderbird-115.8.0/build/workspace-hack/Cargo.toml thunderbird-115.9.0/build/workspace-hack/Cargo.toml --- thunderbird-115.8.0/build/workspace-hack/Cargo.toml 2024-02-16 23:38:25.000000000 +0000 +++ thunderbird-115.9.0/build/workspace-hack/Cargo.toml 2024-03-15 16:02:32.000000000 +0000 @@ -90,6 +90,7 @@ "profileapi", "psapi", "rpcndr", + "securitybaseapi", "setupapi", "shlobj", "std", diff -Nru thunderbird-115.8.0/comm/.gecko_rev.yml thunderbird-115.9.0/comm/.gecko_rev.yml --- thunderbird-115.8.0/comm/.gecko_rev.yml 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/.gecko_rev.yml 2024-03-15 16:03:02.000000000 +0000 @@ -1,8 +1,8 @@ --- GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified GECKO_HEAD_REPOSITORY: https://hg.mozilla.org/releases/mozilla-esr115 -GECKO_HEAD_REF: FIREFOX_115_8_0esr_BUILD1 -GECKO_HEAD_REV: 17fcbdf6426663c10da5d0ba21927e71184304c3 +GECKO_HEAD_REF: FIREFOX_115_9_0esr_BUILD1 +GECKO_HEAD_REV: f3dd0afed51cb7283d4fa06a0c40286eee657e30 ### For comm-central # GECKO_BASE_REPOSITORY: https://hg.mozilla.org/mozilla-unified diff -Nru thunderbird-115.8.0/comm/mail/base/content/about3Pane.js thunderbird-115.9.0/comm/mail/base/content/about3Pane.js --- thunderbird-115.8.0/comm/mail/base/content/about3Pane.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/content/about3Pane.js 2024-03-15 16:03:02.000000000 +0000 @@ -6798,7 +6798,7 @@ } if (gViewWrapper.isSingleFolder) { - if (gViewWrapper.isVirtual) { + if (gViewWrapper.isVirtual || gViewWrapper.search.hasSearchTerms) { gViewWrapper.showGroupedBySort = false; } else { // Must ensure rows are collapsed and kExpandAll is unset. @@ -6815,7 +6815,10 @@ // Restore Grouped By state post sort direction change. if (grouped) { - if (gViewWrapper.isVirtual && gViewWrapper.isSingleFolder) { + if ( + gViewWrapper.isSingleFolder && + (gViewWrapper.isVirtual || gViewWrapper.search.hasSearchTerms) + ) { this.groupBySort(); } // Restore Grouped By selection post sort direction change. diff -Nru thunderbird-115.8.0/comm/mail/base/content/widgets/tabmail-tab.js thunderbird-115.9.0/comm/mail/base/content/widgets/tabmail-tab.js --- thunderbird-115.8.0/comm/mail/base/content/widgets/tabmail-tab.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/content/widgets/tabmail-tab.js 2024-03-15 16:03:02.000000000 +0000 @@ -55,7 +55,8 @@ - button creates a new tab stop. See bug 1754097 --> + title="&closeTab.label;" + data-telemetry-id="tab-close-button"> diff -Nru thunderbird-115.8.0/comm/mail/base/test/browser/browser_browserContext.js thunderbird-115.9.0/comm/mail/base/test/browser/browser_browserContext.js --- thunderbird-115.8.0/comm/mail/base/test/browser/browser_browserContext.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/test/browser/browser_browserContext.js 2024-03-15 16:03:02.000000000 +0000 @@ -299,7 +299,7 @@ let { panel, browser } = await openExtensionPopup( window, - "ext-browsercontext\\@mochi.test" + "ext-browsercontext@mochi.test" ); await TestUtils.waitForCondition( () => browser.clientWidth > 100, diff -Nru thunderbird-115.8.0/comm/mail/base/test/browser/browser_formPickers.js thunderbird-115.9.0/comm/mail/base/test/browser/browser_formPickers.js --- thunderbird-115.8.0/comm/mail/base/test/browser/browser_formPickers.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/test/browser/browser_formPickers.js 2024-03-15 16:03:02.000000000 +0000 @@ -238,7 +238,7 @@ let { panel, browser } = await openExtensionPopup( window, - "ext-formpickers\\@mochi.test" + "ext-formpickers@mochi.test" ); await checkABrowser(browser); panel.hidePopup(); diff -Nru thunderbird-115.8.0/comm/mail/base/test/browser/browser_interactionTelemetry.js thunderbird-115.9.0/comm/mail/base/test/browser/browser_interactionTelemetry.js --- thunderbird-115.8.0/comm/mail/base/test/browser/browser_interactionTelemetry.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/test/browser/browser_interactionTelemetry.js 2024-03-15 16:03:02.000000000 +0000 @@ -1,36 +1,49 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ -"use strict"; +const { MessageGenerator } = ChromeUtils.import( + "resource://testing-common/mailnews/MessageGenerator.jsm" +); +const { TelemetryTestUtils } = ChromeUtils.importESModule( + "resource://testing-common/TelemetryTestUtils.sys.mjs" +); + +const tabmail = document.getElementById("tabmail"); +const about3Pane = tabmail.currentAbout3Pane; + +add_setup(async function () { + const generator = new MessageGenerator(); + + MailServices.accounts.createLocalMailAccount(); + const account = MailServices.accounts.accounts[0]; + account.addIdentity(MailServices.accounts.createIdentity()); + const rootFolder = account.incomingServer.rootFolder.QueryInterface( + Ci.nsIMsgLocalMailFolder + ); + const testFolder = rootFolder + .createLocalSubfolder("interactionTelemetry") + .QueryInterface(Ci.nsIMsgLocalMailFolder); + testFolder.addMessage(generator.makeMessage({}).toMessageString()); + + about3Pane.restoreState({ + folderURI: testFolder.URI, + messagePaneVisible: true, + }); + about3Pane.threadTree.selectedIndex = 0; -const AREAS = ["keyboard", "calendar", "chat", "message_display", "toolbox"]; + Services.telemetry.clearScalars(); -// Checks that the correct number of clicks are registered against the correct -// keys in the scalars. -function assertInteractionScalars(expectedAreas) { - let processScalars = - Services.telemetry.getSnapshotForKeyedScalars("main", true)?.parent ?? {}; - - for (let source of AREAS) { - let scalars = processScalars?.[`tb.ui.interaction.${source}`] ?? {}; - - let expected = expectedAreas[source] ?? {}; - - let expectedKeys = new Set( - Object.keys(scalars).concat(Object.keys(expected)) - ); - for (let key of expectedKeys) { - Assert.equal( - scalars[key], - expected[key], - `Expected to see the correct value for ${key} in ${source}.` - ); - } - } -} + registerCleanupFunction(async () => { + // Prevent the test timing out waiting for focus. + document.getElementById("button-appmenu").focus(); + MailServices.accounts.removeAccount(account, false); + }); +}); add_task(async function () { - Services.telemetry.clearScalars(); + await SimpleTest.promiseFocus(window); + + // Open the calendar tab by clicking on the spaces toolbar button. EventUtils.synthesizeMouseAtCenter( document.getElementById("calendarButton"), @@ -38,6 +51,8 @@ window ); + // Click the button for creating a new calendar. + let calendarWindowPromise = BrowserTestUtils.promiseAlertDialog( "cancel", "chrome://calendar/content/calendar-creation.xhtml" @@ -48,6 +63,9 @@ window ); await calendarWindowPromise; + await SimpleTest.promiseFocus(window); + + // Close the calendar tab. EventUtils.synthesizeMouseAtCenter( document.querySelector("#tabmail-tabs tab:nth-child(2) .tab-close-button"), @@ -55,13 +73,170 @@ window ); - assertInteractionScalars({ - calendar: { - newCalendarSidebarButton: 1, + // Install an add-on with action buttons. + + const extension1 = ExtensionTestUtils.loadExtension({ + manifest: { + applications: { + gecko: { + id: "interaction1@mochi.test", + }, + }, + browser_action: {}, + compose_action: {}, + message_display_action: {}, }, - toolbox: { - calendarButton: 1, - "tab-close-button": 1, + }); + await extension1.startup(); + + // Click the action buttons. + + await clickExtensionButton(window, "ext-interaction1@mochi.test"); + await clickExtensionButton( + tabmail.currentAboutMessage, + "interaction1_mochi_test-messageDisplayAction-toolbarbutton" + ); + + const composeWindowPromise = BrowserTestUtils.domWindowOpenedAndLoaded(); + const params = Cc[ + "@mozilla.org/messengercompose/composeparams;1" + ].createInstance(Ci.nsIMsgComposeParams); + params.composeFields = Cc[ + "@mozilla.org/messengercompose/composefields;1" + ].createInstance(Ci.nsIMsgCompFields); + MailServices.compose.OpenComposeWindowWithParams(null, params); + const composeWindow = await composeWindowPromise; + await clickExtensionButton( + composeWindow, + "interaction1_mochi_test-composeAction-toolbarbutton" + ); + await BrowserTestUtils.closeWindow(composeWindow); + await SimpleTest.promiseFocus(window); + + // Check all of the things we clicked on have been recorded. + + let scalars = TelemetryTestUtils.getProcessScalars("parent", true); + const calendarScalars = scalars["tb.ui.interaction.calendar"]; + const composeScalars = scalars["tb.ui.interaction.message_compose"]; + const displayScalars = scalars["tb.ui.interaction.message_display"]; + let toolboxScalars = scalars["tb.ui.interaction.toolbox"]; + + Assert.equal( + toolboxScalars.calendarButton, + 1, + "spaces toolbar calendar button" + ); + Assert.equal( + calendarScalars.newCalendarSidebarButton, + 1, + "new calendar button" + ); + Assert.equal(toolboxScalars["tab-close-button"], 1, "tab close button"); + + // Check add-on buttons have the identifiers replaced with a generic `addonX`. + + let addonKeys = Object.keys(toolboxScalars).filter(k => + k.startsWith("addon") + ); + Assert.equal(addonKeys.length, 1, "first add-on should have been recorded"); + info(`first addon key is ${addonKeys[0]}`); + Assert.equal( + toolboxScalars[addonKeys[0]], + 1, + "first add-on browser action button" + ); + Assert.equal( + displayScalars[addonKeys[0]], + 1, + "first add-on display action button uses the same add-on key" + ); + Assert.equal( + composeScalars[addonKeys[0]], + 1, + "first add-on compose action button uses the same add-on key" + ); + + // Install a second add-on with action buttons. + + const extension2 = ExtensionTestUtils.loadExtension({ + manifest: { + applications: { + gecko: { + id: "interaction2@mochi.test", + }, + }, + browser_action: {}, + compose_action: {}, + message_display_action: {}, }, }); + await extension2.startup(); + + // Click one of the action buttons. + + await clickExtensionButton(window, "ext-interaction2@mochi.test"); + + // Check the second add-on has a second generic identifier and that only the + // action button we clicked on has been recorded for it. + + scalars = TelemetryTestUtils.getProcessScalars("parent", true); + toolboxScalars = scalars["tb.ui.interaction.toolbox"]; + + addonKeys = Object.keys(toolboxScalars).filter(k => k.startsWith("addon")); + Assert.equal(addonKeys.length, 2, "second add-on should have been recorded"); + info(`second addon key is ${addonKeys[1]}`); + Assert.equal( + toolboxScalars[addonKeys[0]], + 1, + "first add-on browser action button should be unchanged" + ); + Assert.equal( + displayScalars[addonKeys[0]], + 1, + "first add-on display action button should be unchanged" + ); + Assert.equal( + composeScalars[addonKeys[0]], + 1, + "first add-on compose action button should be unchanged" + ); + Assert.equal( + toolboxScalars[addonKeys[1]], + 1, + "second add-on browser action button" + ); + Assert.equal( + displayScalars[addonKeys[1]], + undefined, + "second add-on display action button should have no record" + ); + Assert.equal( + composeScalars[addonKeys[1]], + undefined, + "second add-on compose action button should have no record" + ); + + // Click again on one of the first add-on's buttons. Check that the right + // count is incremented. + + await clickExtensionButton(window, "ext-interaction1@mochi.test"); + + scalars = TelemetryTestUtils.getProcessScalars("parent", true); + toolboxScalars = scalars["tb.ui.interaction.toolbox"]; + + addonKeys = Object.keys(toolboxScalars).filter(k => k.startsWith("addon")); + Assert.equal(addonKeys.length, 2); + Assert.equal( + toolboxScalars[addonKeys[0]], + 2, + "first add-on browser action button" + ); + Assert.equal( + toolboxScalars[addonKeys[1]], + 1, + "second add-on browser action button" + ); + + await extension1.unload(); + await extension2.unload(); }); diff -Nru thunderbird-115.8.0/comm/mail/base/test/browser/head.js thunderbird-115.9.0/comm/mail/base/test/browser/head.js --- thunderbird-115.8.0/comm/mail/base/test/browser/head.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/base/test/browser/head.js 2024-03-15 16:03:02.000000000 +0000 @@ -6,16 +6,8 @@ "resource:///modules/MailServices.jsm" ); -async function focusWindow(win) { - win.focus(); - await TestUtils.waitForCondition( - () => Services.focus.focusedWindow?.browsingContext.topChromeWindow == win, - "waiting for window to be focused" - ); -} - -async function openExtensionPopup(win, buttonId) { - await focusWindow(win.top); +async function clickExtensionButton(win, buttonId) { + buttonId = CSS.escape(buttonId); let actionButton = await TestUtils.waitForCondition( () => @@ -30,6 +22,12 @@ ); EventUtils.synthesizeMouseAtCenter(actionButton, {}, win); + return actionButton; +} + +async function openExtensionPopup(win, buttonId) { + const actionButton = await clickExtensionButton(win, buttonId); + let panel = win.top.document.getElementById( "webextension-remote-preload-panel" ); @@ -318,7 +316,7 @@ // chance to run. Instead, when it runs register another cleanup function // which will run last. registerCleanupFunction(function () { - registerCleanupFunction(function () { + registerCleanupFunction(async function () { Services.prefs.clearUserPref("mail.pane_config.dynamic"); Services.xulStore.removeValue( "chrome://messenger/content/messenger.xhtml", @@ -359,13 +357,10 @@ resetSmartMailboxes(); ensure_cards_view(); - // Some tests that open new windows don't return focus to the main window - // in a way that satisfies mochitest, and the test times out. - Services.focus.focusedWindow = window; - // Focus an element in the main window, then blur it again to avoid it - // hijacking keypresses. - let mainWindowElement = document.getElementById("button-appmenu"); - mainWindowElement.focus(); - mainWindowElement.blur(); + // Some tests that open new windows confuse mochitest, which waits for a + // focus event on the main window, and the test times out. If we focus a + // different window (browser-harness.xhtml should be the only other window + // at this point) then mochitest gets its focus event and the test ends. + await SimpleTest.promiseFocus([...Services.wm.getEnumerator(null)][1]); }); }); diff -Nru thunderbird-115.8.0/comm/mail/components/MailGlue.jsm thunderbird-115.9.0/comm/mail/components/MailGlue.jsm --- thunderbird-115.8.0/comm/mail/components/MailGlue.jsm 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/MailGlue.jsm 2024-03-15 16:03:02.000000000 +0000 @@ -435,8 +435,14 @@ .initializeDBViewStrings(); let windows = Services.wm.getEnumerator("mail:3pane"); while (windows.hasMoreElements()) { - let win = windows.getNext(); - win.document.getElementById("threadTree")?.invalidate(); + const tabmail = windows.getNext().document.getElementById("tabmail"); + if (tabmail) { + for (const tab of tabmail.tabInfo) { + if (tab.mode.name == "mail3PaneTab") { + tab.chromeBrowser?.contentWindow.threadTree?.invalidate(); + } + } + } } // Refresh the folder tree. let fls = Cc["@mozilla.org/mail/folder-lookup;1"].getService( diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/adr.mjs thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/adr.mjs --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/adr.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/adr.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -66,6 +66,7 @@ this.vCardType = this.querySelector("vcard-type"); this.vCardType.createTypeSelection(this.vCardPropertyEntry, { createLabel: true, + propertyType: "adr", }); this.fromVCardPropertyEntryToUI(); diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/edit.mjs thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/edit.mjs --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/edit.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/edit.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -975,7 +975,8 @@ * @param {string} [options.propertyType] - Specifies the set of types that * should be available and shown for the corresponding property. Set as * "tel" to use the set of telephone types. Otherwise defaults to only using - * the `home`, `work` and `(None)` types. + * the `home`, `work` and `(None)` types. Also used to set the telemetry + * identifier. */ createTypeSelection(vCardPropertyEntry, options) { let template; @@ -997,6 +998,7 @@ this.selectEl = this.querySelector("select"); let selectId = vCardIdGen.next().value; this.selectEl.id = selectId; + this.selectEl.dataset.telemetryId = `vcard-type-selection-${options.propertyType}`; // Just abandon any values we don't have UI for. We don't have any way to // know whether to keep them or not, and they're very rarely used. diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/email.mjs thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/email.mjs --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/email.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/email.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -59,6 +59,7 @@ this.vCardType = this.querySelector("vcard-type"); this.vCardType.createTypeSelection(this.vCardPropertyEntry, { labelledBy: "addr-book-edit-email-type", + propertyType: "email", }); this.querySelector(".remove-property-button").addEventListener( diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/tel.mjs thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/tel.mjs --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/tel.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/tel.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -39,13 +39,12 @@ let clonedTemplate = template.content.cloneNode(true); this.appendChild(clonedTemplate); - this.inputElement = this.querySelector('input[type="text"]'); + this.inputElement = this.querySelector('input[type="tel"]'); let urlId = vCardIdGen.next().value; this.inputElement.id = urlId; - let urlLabel = this.querySelector('label[for="text"]'); + const urlLabel = this.querySelector('label[for="tel"]'); urlLabel.htmlFor = urlId; document.l10n.setAttributes(urlLabel, "vcard-tel-label"); - this.inputElement.type = "tel"; // Create the tel type selection. this.vCardType = this.querySelector("vcard-type"); diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/url.mjs thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/url.mjs --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/url.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/url.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -32,16 +32,15 @@ } this.hasConnected = true; - let template = document.getElementById("template-vcard-edit-type-text"); - let clonedTemplate = template.content.cloneNode(true); + const template = document.getElementById("template-vcard-edit-type-url"); + const clonedTemplate = template.content.cloneNode(true); this.appendChild(clonedTemplate); - this.urlEl = this.querySelector('input[type="text"]'); + this.urlEl = this.querySelector('input[type="url"]'); let urlId = vCardIdGen.next().value; this.urlEl.id = urlId; - let urlLabel = this.querySelector('label[for="text"]'); + const urlLabel = this.querySelector('label[for="url"]'); urlLabel.htmlFor = urlId; - this.urlEl.type = "url"; document.l10n.setAttributes(urlLabel, "vcard-url-label"); this.urlEl.addEventListener("input", () => { @@ -58,6 +57,7 @@ this.vCardType = this.querySelector("vcard-type"); this.vCardType.createTypeSelection(this.vCardPropertyEntry, { createLabel: true, + propertyType: "url", }); this.querySelector(".remove-property-button").addEventListener( diff -Nru thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/vCardTemplates.inc.xhtml thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/vCardTemplates.inc.xhtml --- thunderbird-115.8.0/comm/mail/components/addrbook/content/vcard-edit/vCardTemplates.inc.xhtml 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/addrbook/content/vcard-edit/vCardTemplates.inc.xhtml 2024-03-15 16:03:02.000000000 +0000 @@ -113,7 +113,8 @@ data-l10n-id="vcard-org-add" class="addr-book-edit-fieldset-button add-property-button icon-button" type="button"> - @@ -204,15 +205,18 @@ @@ -220,20 +224,22 @@ - - @@ -269,27 +279,36 @@ @@ -301,27 +320,28 @@
@@ -330,6 +350,7 @@ @@ -337,21 +358,33 @@ @@ -359,22 +392,23 @@ diff -Nru thunderbird-115.8.0/comm/mail/components/compose/content/MsgComposeCommands.js thunderbird-115.9.0/comm/mail/components/compose/content/MsgComposeCommands.js --- thunderbird-115.8.0/comm/mail/components/compose/content/MsgComposeCommands.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/compose/content/MsgComposeCommands.js 2024-03-15 16:03:02.000000000 +0000 @@ -1579,7 +1579,7 @@ if (tab.mode.name == "mail3PaneTab" && tab.message) { return tab.chromeBrowser.contentWindow?.gDBView?.getURIsForSelection(); } else if (tab.mode.name == "mailMessageTab") { - return [tab.messageURI]; + return [tab.chromeBrowser.contentWindow.gMessageURI]; } return null; } @@ -5902,6 +5902,15 @@ function onSendSMIME() { let emailAddresses = []; + // For signed only messages, use transfer encoding if needed, making it less + // likely for servers to turn the signature invalid. + if ( + gMsgCompose.compFields.composeSecure?.signMessage && + !gMsgCompose.compFields.composeSecure?.requireEncryptMessage + ) { + gMsgCompose.compFields.forceMsgEncoding = true; + } + try { if (!gMsgCompose.compFields.composeSecure.requireEncryptMessage) { return; @@ -7407,9 +7416,22 @@ document.documentElement.setAttribute("lang", languageToSet); } + const checker = GetCurrentEditorSpellChecker(); + + // Spell checker needs to be ready before we can select new dictionaries. + if (gSpellCheckingEnabled && checker?.spellCheckPending) { + await new Promise(resolve => { + Services.obs.addObserver(function observe(subject, topic, data) { + if (subject == gMsgCompose.editor) { + Services.obs.removeObserver(observe, topic); + resolve(); + } + }, "inlineSpellChecker-spellCheck-ended"); + }); + } + await gSpellChecker?.selectDictionaries(languages); - let checker = GetCurrentEditorSpellChecker(); if (checker?.spellChecker) { await checker.spellChecker.setCurrentDictionaries(languages); } @@ -7498,12 +7520,6 @@ if (!dictionaries) { dictionaries = Array.from(gActiveDictionaries); } - let listFormat = new Intl.ListFormat(undefined, { - type: "conjunction", - style: "short", - }); - let languages = []; - let item = languageMenuList.firstElementChild; // No status display, if there is only one or no spelling dictionary available. if (languageMenuList.childElementCount <= 3) { @@ -7513,6 +7529,12 @@ } languageStatusButton.hidden = false; + const listFormat = new Intl.ListFormat(Services.locale.appLocalesAsBCP47, { + type: "conjunction", + style: "short", + }); + const languages = []; + let item = languageMenuList.firstElementChild; while (item) { if (item.tagName.toLowerCase() === "menuseparator") { break; diff -Nru thunderbird-115.8.0/comm/mail/components/compose/content/editorUtilities.js thunderbird-115.9.0/comm/mail/components/compose/content/editorUtilities.js --- thunderbird-115.8.0/comm/mail/components/compose/content/editorUtilities.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/compose/content/editorUtilities.js 2024-03-15 16:03:02.000000000 +0000 @@ -236,7 +236,7 @@ * Gets the editor's spell checker. Could return null if there are no * dictionaries installed. * - * @returns {nsIInlineSpellChecker?} + * @returns {?nsIInlineSpellChecker} */ function GetCurrentEditorSpellChecker() { try { diff -Nru thunderbird-115.8.0/comm/mail/components/compose/content/messengercompose.xhtml thunderbird-115.9.0/comm/mail/components/compose/content/messengercompose.xhtml --- thunderbird-115.8.0/comm/mail/components/compose/content/messengercompose.xhtml 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/compose/content/messengercompose.xhtml 2024-03-15 16:03:02.000000000 +0000 @@ -790,13 +790,6 @@ onpopupshowing="onBlockedContentOptionsShowing(event);"> - - - @@ -1909,8 +1902,7 @@ + data-l10n-id="encryption-options-openpgp"> @@ -1955,10 +1947,12 @@ label="&spellingButton.label;" tooltiptext="&spellingButton.tooltip;" command="cmd_spelling"> - - + + + Records a count of interactions with items in the address book. + expires: never + kind: uint + keyed: true + notification_emails: + - "telemetry-client-dev@thunderbird.net" + products: + - "thunderbird" + release_channel_collection: opt-out + record_in_processes: + - "main" + calendar: bug_numbers: - 1736739 @@ -533,6 +549,22 @@ expires: never kind: uint keyed: true + notification_emails: + - "telemetry-client-dev@thunderbird.net" + products: + - "thunderbird" + release_channel_collection: opt-out + record_in_processes: + - "main" + + message_compose: + bug_numbers: + - 1868480 + description: > + Records a count of interactions with items in the message composer. + expires: never + kind: uint + keyed: true notification_emails: - "telemetry-client-dev@thunderbird.net" products: diff -Nru thunderbird-115.8.0/comm/mail/components/unifiedtoolbar/content/customizable-element.mjs thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/customizable-element.mjs --- thunderbird-115.8.0/comm/mail/components/unifiedtoolbar/content/customizable-element.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/customizable-element.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -10,6 +10,7 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { + ExtensionCommon: "resource://gre/modules/ExtensionCommon.sys.mjs", ExtensionParent: "resource://gre/modules/ExtensionParent.sys.mjs", }); const browserActionFor = extensionId => @@ -165,6 +166,9 @@ is: "extension-action-button", }); extensionButton.setAttribute("extension", extensionId); + extensionButton.dataset.telemetryId = `${lazy.ExtensionCommon.makeWidgetId( + extensionId + )}-browserAction-toolbarbutton`; this.querySelector(".live-content").append(extensionButton); if (this.disabled) { this.attributeChangedCallback("disabled"); diff -Nru thunderbird-115.8.0/comm/mail/components/unifiedtoolbar/content/unified-toolbar.mjs thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/unified-toolbar.mjs --- thunderbird-115.8.0/comm/mail/components/unifiedtoolbar/content/unified-toolbar.mjs 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/components/unifiedtoolbar/content/unified-toolbar.mjs 2024-03-15 16:03:02.000000000 +0000 @@ -280,7 +280,10 @@ #handleKey = event => { // Don't handle any key events within menupopups that are children of the // toolbar contents. - if (event.target.closest("menupopup")) { + if ( + event.target.closest("menupopup") || + event.target.closest(".search-bar") + ) { return; } switch (event.key) { diff -Nru thunderbird-115.8.0/comm/mail/config/version.txt thunderbird-115.9.0/comm/mail/config/version.txt --- thunderbird-115.8.0/comm/mail/config/version.txt 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/config/version.txt 2024-03-15 16:03:02.000000000 +0000 @@ -1 +1 @@ -115.8.0 +115.9.0 diff -Nru thunderbird-115.8.0/comm/mail/config/version_display.txt thunderbird-115.9.0/comm/mail/config/version_display.txt --- thunderbird-115.8.0/comm/mail/config/version_display.txt 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/config/version_display.txt 2024-03-15 16:03:02.000000000 +0000 @@ -1 +1 @@ -115.8.0 +115.9.0 diff -Nru thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/RNP.jsm thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/RNP.jsm --- thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/RNP.jsm 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/RNP.jsm 2024-03-15 16:03:02.000000000 +0000 @@ -1750,19 +1750,23 @@ output_to_memory ); - RNPLib.rnp_ffi_set_pass_provider( - RNPLib.ffi, - RNPLib.rnp_password_cb_t( - isFirstTry - ? collect_key_info_password_cb - : use_remembered_password_cb, - this, // this value used while executing callback - false // callback return value if exception is thrown - ), - null + // Use a local variable for the temporary wrapper object, + // to ensure the JS engine will keep the object alive during + // the call to rnp_op_verify_execute. + let callbackKeepAlive = RNPLib.rnp_password_cb_t( + isFirstTry ? collect_key_info_password_cb : use_remembered_password_cb, + this, // this value used while executing callback + false // callback return value if exception is thrown ); + + RNPLib.rnp_ffi_set_pass_provider(RNPLib.ffi, callbackKeepAlive, null); result.exitCode = RNPLib.rnp_op_verify_execute(verify_op); + + // This call resets the callback reference kept by RNP, which + // means we can clean up callbackKeepAlive and allow the + // referenced object to be cleaned up. RNPLib.setDefaultPasswordCB(); + callbackKeepAlive = null; if (isFirstTry && result.exitCode != 0 && collected_fingerprint) { let key_handle = this.getKeyHandleByKeyIdOrFingerprint( diff -Nru thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/keyserver.jsm thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/keyserver.jsm --- thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/keyserver.jsm 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/keyserver.jsm 2024-03-15 16:03:02.000000000 +0000 @@ -154,7 +154,7 @@ if (exitCodeObj.value !== 0 || keyData.length === 0) { return null; } - return 'keytext="' + encodeURIComponent(keyData) + '"'; + return `keytext=${encodeURIComponent(keyData)}`; case lazy.EnigmailConstants.DOWNLOAD_KEY: case lazy.EnigmailConstants.DOWNLOAD_KEY_NO_IMPORT: @@ -387,6 +387,10 @@ `keyserver.jsm: accessHkpInternal.accessKeyServer: requesting ${url}\n` ); xmlReq.open(method, url); + xmlReq.setRequestHeader( + "Content-Type", + "application/x-www-form-urlencoded" + ); xmlReq.send(payLoad); }); }, @@ -485,7 +489,7 @@ break; } } catch (ex) { - console.log(ex.errorDetails); + console.error(ex); rv = false; break; } diff -Nru thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/persistentCrypto.jsm thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/persistentCrypto.jsm --- thunderbird-115.8.0/comm/mail/extensions/openpgp/content/modules/persistentCrypto.jsm 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/extensions/openpgp/content/modules/persistentCrypto.jsm 2024-03-15 16:03:02.000000000 +0000 @@ -496,13 +496,18 @@ // headers are found from the beginning up to the start of the body m.initialize(data.substr(0, bodyIndex)); - mimePart.headers._rawHeaders.set("content-type", [ - m.extractHeader("content-type", false) || "", - ]); - - mimePart.headers._rawHeaders.delete("content-transfer-encoding"); - mimePart.headers._rawHeaders.delete("content-disposition"); - mimePart.headers._rawHeaders.delete("content-description"); + for (const hdrName of [ + "content-type", + "content-transfer-encoding", + "content-disposition", + "content-description", + ]) { + mimePart.headers._rawHeaders.delete(hdrName); + const val = m.extractHeader(hdrName, false); + if (val) { + mimePart.headers._rawHeaders.set(hdrName, val); + } + } mimePart.subParts = []; mimePart.body = data.substr(bodyIndex); diff -Nru thunderbird-115.8.0/comm/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js --- thunderbird-115.8.0/comm/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMessengerOverlay.js 2024-03-15 16:03:02.000000000 +0000 @@ -1685,7 +1685,7 @@ node = node.nextSibling; } - Enigmail.hdrView.setSubject(m.subject); + Enigmail.hdrView.setSubject(m.subject, gMessage); } } }, diff -Nru thunderbird-115.8.0/comm/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js --- thunderbird-115.8.0/comm/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/extensions/openpgp/content/ui/enigmailMsgHdrViewOverlay.js 2024-03-15 16:03:02.000000000 +0000 @@ -732,7 +732,7 @@ return canDetach; }, - setSubject(subject) { + setSubject(subject, hdr) { // Strip multiple localized Re: prefixes. This emulates NS_MsgStripRE(). let prefixes = Services.prefs .getComplexValue("mailnews.localizedRe", Ci.nsIPrefLocalizedString) @@ -749,22 +749,21 @@ let hadRe = newSubject != subject; // Update the message. - gMessage.subject = newSubject; + hdr.subject = newSubject; let oldFlags = gMessage.flags; if (hadRe) { - gMessage.flags |= Ci.nsMsgMessageFlags.HasRe; + hdr.flags |= Ci.nsMsgMessageFlags.HasRe; newSubject = "Re: " + newSubject; } - document.title = newSubject; - currentHeaderData.subject.headerValue = newSubject; - document.getElementById("expandedsubjectBox").headerValue = newSubject; + if (hdr == gMessage) { + document.title = newSubject; + if ("subject" in currentHeaderData) { + currentHeaderData.subject.headerValue = newSubject; + } + document.getElementById("expandedsubjectBox").headerValue = newSubject; + } // This even works if the flags haven't changed. Causes repaint in all thread trees. - gMessage.folder?.msgDatabase.notifyHdrChangeAll( - gMessage, - oldFlags, - gMessage.flags, - {} - ); + hdr.folder?.msgDatabase.notifyHdrChangeAll(hdr, oldFlags, hdr.flags, {}); }, updateHdrBox(header, value) { @@ -787,16 +786,23 @@ }, headerPane: { - isCurrentMessage(uri) { - let uriSpec = uri ? uri.spec : null; - - EnigmailLog.DEBUG( - "enigmailMsgHdrViewOverlay.js: EnigMimeHeaderSink.isCurrentMessage: uri.spec=" + - uriSpec + - "\n" - ); + isCurrentMessage(uriParam) { + // FIXME: it would be nicer to just be able to compare the URI specs. + // That does currently not work for all cases, e.g. + // mailbox:///...data/eml/signed-encrypted-autocrypt-gossip.eml?type=application/x-message-display&number=0 vs. + // file:///...data/eml/signed-encrypted-autocrypt-gossip.eml?type=application/x-message-display + + const uri = Services.io + .newURI(uriParam.spec) + .QueryInterface(Ci.nsIMsgMessageUrl); + const uri2 = EnigmailFuncs.getUrlFromUriSpec(gMessageURI); + if (uri.host != uri2.host) { + return false; + } - return true; + const id = EnigmailURIs.msgIdentificationFromUrl(uri); + const id2 = EnigmailURIs.msgIdentificationFromUrl(uri2); + return id.folder === id2.folder && id.msgNum === id2.msgNum; }, /** @@ -1049,7 +1055,6 @@ "enigmailMsgHdrViewOverlay.js: EnigMimeHeaderSink.modifyMessageHeaders:\n" ); - let uriSpec = uri ? uri.spec : null; let hdr; try { @@ -1064,14 +1069,21 @@ if (typeof hdr !== "object") { return; } - if (!this.displaySubPart(mimePartNumber, uriSpec)) { + if (!this.displaySubPart(mimePartNumber, uri?.spec)) { return; } - let msg = gMessage; + let msg = uri.messageHeader; + if (!msg && this.isCurrentMessage(uri)) { + // .eml messages opened from file:// + msg = gMessage; + } + if (!msg) { + return; + } if ("subject" in hdr) { - Enigmail.hdrView.setSubject(hdr.subject); + Enigmail.hdrView.setSubject(hdr.subject, msg); } if ("date" in hdr) { diff -Nru thunderbird-115.8.0/comm/mail/modules/MailUsageTelemetry.jsm thunderbird-115.9.0/comm/mail/modules/MailUsageTelemetry.jsm --- thunderbird-115.8.0/comm/mail/modules/MailUsageTelemetry.jsm 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/modules/MailUsageTelemetry.jsm 2024-03-15 16:03:02.000000000 +0000 @@ -11,13 +11,15 @@ const DOMWINDOW_OPENED_TOPIC = "domwindowopened"; // Window types we're interested in. -const WINDOW_TYPES = ["mail:3pane", "mail:messageWindow"]; +const WINDOW_TYPES = ["mail:3pane", "mail:messageWindow", "msgcompose"]; // Window URLs we're interested in. const WINDOW_URLS = [ "chrome://messenger/content/messenger.xhtml", "chrome://messenger/content/messageWindow.xhtml", + "chrome://messenger/content/messengercompose/messengercompose.xhtml", "about:3pane", + "about:addressbook", "about:message", ]; @@ -29,9 +31,11 @@ "command", "checkbox", "input", + "textarea", "button", "image", "radio", + "select", "richlistitem", ]; @@ -40,10 +44,21 @@ // when iterating JavaScript will guarantee that ordering and so we will find // the most specific area first. const MESSENGER_UI_CONTAINER_IDS = { + // Address Book. + toolbox: "addressbook", + booksPane: "addressbook", + cardsPane: "addressbook", + detailsPane: "addressbook", + photoDialog: "addressbook", + bookContext: "addressbook", + sortContext: "addressbook", + cardContext: "addressbook", + // Calendar. "today-pane-panel": "calendar", calendarTabPanel: "calendar", "calendar-popupset": "calendar", + calControlBarMenuPopup: "calendar", // Chat. chatTabPanel: "chat", @@ -53,10 +68,14 @@ chatContextMenu: "chat", participantListContextMenu: "chat", + // Message composition. + msgcomposeWindow: "message-compose", + // Anything to do with the 3-pane tab or message window. folderPaneHeaderBar: "message-display", folderPaneGetMessagesContext: "message-display", folderPaneMoreContext: "message-display", + folderPaneModeContext: "message-display", folderPaneContext: "message-display", threadPaneHeaderBar: "message-display", threadPaneDisplayContext: "message-display", @@ -71,15 +90,36 @@ attachmentListContext: "message-display", "attachment-toolbar-context-menu": "message-display", copyUrlPopup: "message-display", + simpleCopyPopup: "message-display", newsgroupPopup: "message-display", + remoteContentOptions: "message-display", + phishingOptions: "message-display", - // The tab bar and the toolbox. + // The toolbox, menu bar, tab bar, spaces toolbar and status bar. "navigation-toolbox": "toolbox", "mail-toolbox": "toolbox", "quick-filter-bar": "toolbox", "appMenu-popup": "toolbox", + unifiedToolbarMenu: "toolbox", + "toolbar-context-menu": "toolbox", tabContextMenu: "toolbox", spacesToolbar: "toolbox", + spacesContextMenu: "toolbox", + settingsContextMenu: "toolbox", + spacesToolbarContextMenu: "toolbox", + spacesToolbarAddonsPopup: "toolbox", + spacesToolbarCustomizationPanel: "toolbox", + "status-bar": "toolbox", + customizationTargetMenu: "toolbox", + customizationPaletteMenu: "toolbox", + toolbarMoveToPopup: "toolbox", + toolbarFolderLocationPopup: "toolbox", + toolbarTagPopup: "toolbox", + toolbarMarkPopup: "toolbox", + toolbarViewPickerPopup: "toolbox", + messageHistoryPopup: "toolbox", + toolbarGetMessagesContext: "toolbox", + unifiedToolbarCreateBook: "toolbox", }; const KNOWN_ADDONS = []; @@ -99,19 +139,15 @@ return `addon${pos}`; } - if (widgetId.endsWith("-browserAction-toolbarbutton")) { - widgetId = addonId( - widgetId.substring( - 0, - widgetId.length - "-browserAction-toolbarbutton".length - ) - ); - } else if (widgetId.endsWith("-messageDisplayAction-toolbarbutton")) { + const actionIdSuffix = [ + "-browserAction-toolbarbutton", + "-messageDisplayAction-toolbarbutton", + "-composeAction-toolbarbutton", + ].find(suffix => widgetId.endsWith(suffix)); + + if (actionIdSuffix) { widgetId = addonId( - widgetId.substring( - 0, - widgetId.length - "-messageDisplayAction-toolbarbutton".length - ) + widgetId.substring(0, widgetId.length - actionIdSuffix.length) ); } else if (widgetId.startsWith("ext-keyset-id-")) { // Webextension command shortcuts don't have an id on their key element so @@ -188,13 +224,14 @@ return null; } - if (node.id) { - return node.id; + // Use this where more than one node of a type could be created (similar + // to where a CSS class selector would be used instead of an ID selector). + if (node.dataset.telemetryId) { + return node.dataset.telemetryId; } - // Special case in the tabs. - if (node.classList.contains("tab-close-button")) { - return "tab-close-button"; + if (node.id) { + return node.id; } // One of these will at least let us know what the widget is for. @@ -284,7 +321,10 @@ } // This is what events targeted at content will actually look like. - if (sourceEvent.target.localName == "browser") { + if ( + sourceEvent.target.localName == "browser" || + sourceEvent.target.localName == "editor" + ) { return; } diff -Nru thunderbird-115.8.0/comm/mail/test/browser/composition/browser_focus.js thunderbird-115.9.0/comm/mail/test/browser/composition/browser_focus.js --- thunderbird-115.8.0/comm/mail/test/browser/composition/browser_focus.js 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/test/browser/composition/browser_focus.js 2024-03-15 16:03:02.000000000 +0000 @@ -77,6 +77,8 @@ if (options.languageButton) { // languageButton only shows if we have more than one dictionary, but we // will show it anyway. + // FIXME: should test under real conditions. + // updateLanguageInStatusBar() can hide the button during tests. languageButton.hidden = false; } @@ -167,7 +169,7 @@ } // From Message Body (or Attachment bucket) to Language button. - if (options.languageButton) { + if (options.languageButton && !languageButton.hidden) { Assert.ok(languageButton.matches(":focus"), "forward to status bar"); goForward(); } @@ -202,7 +204,7 @@ goBackward(); } - if (options.languageButton) { + if (options.languageButton && !languageButton.hidden) { Assert.ok(languageButton.matches(":focus"), "backward to status bar"); goBackward(); } @@ -268,7 +270,7 @@ // Same the other way. addressBookList.focus(); goBackward(); - if (options.languageButton) { + if (options.languageButton && !languageButton.hidden) { Assert.ok( languageButton.matches(":focus"), "from addressbook selector to status bar" @@ -303,7 +305,7 @@ contactsInput.matches(":focus-within"), "from Cc button to contacts" ); - } else if (options.languageButton) { + } else if (options.languageButton && !languageButton.hidden) { Assert.ok(languageButton.matches(":focus"), "from Cc button to status bar"); } else if (options.notifications) { Assert.equal( @@ -380,7 +382,7 @@ doc.activeElement, `forward from attachment summary (open: ${open}) to notification` ); - } else if (options.languageButton) { + } else if (options.languageButton && !languageButton.hidden) { Assert.ok( languageButton.matches(":focus"), `forward from attachment summary (open: ${open}) to status bar` @@ -444,7 +446,7 @@ // Try reverse. closeButton.focus(); goForward(); - if (options.languageButton) { + if (options.languageButton && !languageButton.hidden) { Assert.ok( languageButton.matches(":focus"), "forward from notification button to status bar" diff -Nru thunderbird-115.8.0/comm/mail/test/browser/openpgp/browser.ini thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser.ini --- thunderbird-115.8.0/comm/mail/test/browser/openpgp/browser.ini 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser.ini 2024-03-15 16:03:02.000000000 +0000 @@ -16,3 +16,4 @@ [browser_viewMessage2.js] [browser_viewMessageSecurity.js] [browser_viewPartialMessage.js] +[browser_upload.js] diff -Nru thunderbird-115.8.0/comm/mail/test/browser/openpgp/browser_upload.js thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser_upload.js --- thunderbird-115.8.0/comm/mail/test/browser/openpgp/browser_upload.js 1970-01-01 00:00:00.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/test/browser/openpgp/browser_upload.js 2024-03-15 16:03:02.000000000 +0000 @@ -0,0 +1,97 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this file, + * You can obtain one at http://mozilla.org/MPL/2.0/. */ + +var { EnigmailKeyServer } = ChromeUtils.import( + "chrome://openpgp/content/modules/keyserver.jsm" +); + +const { OpenPGPTestUtils } = ChromeUtils.import( + "resource://testing-common/mozmill/OpenPGPTestUtils.jsm" +); + +var { HttpServer } = ChromeUtils.import( +"resource://testing-common/httpd.js" +); + +const { CommonUtils } = ChromeUtils.importESModule( + "resource://services-common/utils.sys.mjs" +); + +// The HTTP server used to check requests sent to key servers. +var httpServer; +// The ID of the key added to the keychain. +var keyID; + +registerCleanupFunction(function () { + httpServer.stop(); +}); + +add_setup(async function () { + // Import the private key, of which we'll later upload the public key. + [keyID] = await OpenPGPTestUtils.importPrivateKey( + window, + new FileUtils.File( + getTestFilePath( + "data/keys/alice@openpgp.example-0xf231550c4f47e38e-secret.asc" + ) + ) + ); + + // Create and start the HTTP server. + httpServer = new HttpServer(); + httpServer.start(-1); +}); + +add_task(async function testHKPUpload() { + // The result of the latest upload attempt. + let latestHKPUploadAttempt = { + contentType: null, + content: null, + }; + + // Register a path handler on the server to handle HKP key upload. + function addKey(request, response) { + // Store the parts of the request we want to check later, i.e. its + // content-type header and its body. + latestHKPUploadAttempt = { + contentType: request.getHeader("content-type"), + content: CommonUtils.readBytesFromInputStream(request.bodyInputStream), + }; + } + + httpServer.registerPathHandler("/pks/add", addKey); + + // Upload the key to the local server. OpenPGPTestUtils.importPrivateKey + // (which we 've used in the setup) adds an "0x" at the start of the key, + // which gets in the way of correctly processing the key ID, so we need to + // remove it. + const success = await EnigmailKeyServer.upload( + keyID.replace(/^0x/, ""), + "hkp://127.0.0.1:" + httpServer.identity.primaryPort + ); + + // Test that the upload succeeded. + Assert.ok(success, "the key upload should succeed"); + // Test that the request was sent with the correct content-type header. + Assert.equal( + latestHKPUploadAttempt.contentType, + "application/x-www-form-urlencoded", + "the request should have the correct content-type header" + ); + // Test that the request was sent with a correctly formatted body: it should + // be URL-encoded form data with a "keytext" key which value is the armored + // key (not surrounded by quotes). + Assert.ok( + latestHKPUploadAttempt.content.startsWith( + "keytext=-----BEGIN%20PGP%20PUBLIC%20KEY%20BLOCK-----" + ), + "the start of the request body should be correctly formatted" + ); + Assert.ok( + latestHKPUploadAttempt.content.endsWith( + "-----END%20PGP%20PUBLIC%20KEY%20BLOCK-----%0D%0A" + ), + "the end of the request body should be correctly formatted" + ); +}); diff -Nru thunderbird-115.8.0/comm/mail/themes/shared/mail/about3Pane.css thunderbird-115.9.0/comm/mail/themes/shared/mail/about3Pane.css --- thunderbird-115.8.0/comm/mail/themes/shared/mail/about3Pane.css 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/themes/shared/mail/about3Pane.css 2024-03-15 16:03:02.000000000 +0000 @@ -616,10 +616,10 @@ font-weight: bold; color: var(--layout-color-3); margin-inline-end: 6px; +} - &:empty { - display: none; - } +.folder-size:empty { + display: none; } #folderTree:focus-within li.selected > .container > .folder-size { diff -Nru thunderbird-115.8.0/comm/mail/themes/shared/mail/messenger.css thunderbird-115.9.0/comm/mail/themes/shared/mail/messenger.css --- thunderbird-115.8.0/comm/mail/themes/shared/mail/messenger.css 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/themes/shared/mail/messenger.css 2024-03-15 16:03:03.000000000 +0000 @@ -1143,9 +1143,9 @@ /* Panel toolbarbuttons */ .panelTitle { - margin-top: 8px; + font-weight: bold; + margin-block: 6px; margin-inline-start: 7px; - margin-bottom: 6px; } .panelButton { diff -Nru thunderbird-115.8.0/comm/mail/themes/shared/mail/unifiedToolbar.css thunderbird-115.9.0/comm/mail/themes/shared/mail/unifiedToolbar.css --- thunderbird-115.8.0/comm/mail/themes/shared/mail/unifiedToolbar.css 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mail/themes/shared/mail/unifiedToolbar.css 2024-03-15 16:03:02.000000000 +0000 @@ -140,6 +140,7 @@ display: flex; flex-direction: column; position: relative; + overflow: hidden; --customization-footer-padding: 12px; box-shadow: 0 2px 12px -3px rgba(0, 0, 0, 0.5), diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupThread.cpp thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.cpp --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupThread.cpp 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -12,24 +12,32 @@ NS_IMPL_ISUPPORTS(nsMsgGroupThread, nsIMsgThread) -nsMsgGroupThread::nsMsgGroupThread() { Init(); } - -nsMsgGroupThread::nsMsgGroupThread(nsIMsgDatabase* db) { - m_db = db; - Init(); -} - -void nsMsgGroupThread::Init() { +nsMsgGroupThread::nsMsgGroupThread(nsIMsgDatabase* db, + nsMsgViewSortOrderValue sortOrder) { m_threadKey = nsMsgKey_None; m_threadRootKey = nsMsgKey_None; m_numUnreadChildren = 0; m_flags = 0; m_newestMsgDate = 0; m_dummy = false; + m_db = db; + m_sortOrder = sortOrder; } nsMsgGroupThread::~nsMsgGroupThread() {} +already_AddRefed nsMsgGroupThread::Clone() { + RefPtr thread = new nsMsgGroupThread(m_db, m_sortOrder); + thread->m_threadKey = m_threadKey; + thread->m_threadRootKey = m_threadRootKey; + thread->m_numUnreadChildren = m_numUnreadChildren; + thread->m_flags = m_flags; + thread->m_newestMsgDate = m_newestMsgDate; + thread->m_dummy = m_dummy; + thread->m_keys = m_keys.Clone(); + return thread.forget(); +} + NS_IMETHODIMP nsMsgGroupThread::SetThreadKey(nsMsgKey threadKey) { m_threadKey = threadKey; // by definition, the initial thread key is also the thread root key. @@ -115,27 +123,8 @@ // since we're sorted by date, we could do a binary search for the // insert point. Or, we could start at the end... if (m_keys.Length() > 0) { - nsMsgViewSortTypeValue sortType; - nsMsgViewSortOrderValue sortOrder; - (void)view->GetSortType(&sortType); - (void)view->GetSortOrder(&sortOrder); - // historical behavior is ascending date order unless our primary sort is - // on date - nsMsgViewSortOrderValue threadSortOrder = - (sortType == nsMsgViewSortType::byDate && - sortOrder == nsMsgViewSortOrder::descending) - ? nsMsgViewSortOrder::descending - : nsMsgViewSortOrder::ascending; - // new behavior is tricky and uses the secondary sort order if the secondary - // sort is on the date - nsMsgViewSortTypeValue secondarySortType; - nsMsgViewSortOrderValue secondarySortOrder; - (void)view->GetSecondarySortType(&secondarySortType); - (void)view->GetSecondarySortOrder(&secondarySortOrder); - if (secondarySortType == nsMsgViewSortType::byDate) - threadSortOrder = secondarySortOrder; // sort by date within group. - insertIndex = GetInsertIndexFromView(view, child, threadSortOrder); + insertIndex = GetInsertIndexFromView(view, child, m_sortOrder); } m_keys.InsertElementAt(insertIndex, newHdrKey); if (!insertIndex) m_threadRootKey = newHdrKey; @@ -654,7 +643,23 @@ return NS_OK; } -nsMsgXFGroupThread::nsMsgXFGroupThread() {} +nsMsgXFGroupThread::nsMsgXFGroupThread(nsMsgViewSortOrderValue sortOrder) + : nsMsgGroupThread(nullptr, sortOrder) {} + +already_AddRefed nsMsgXFGroupThread::Clone() { + RefPtr thread = new nsMsgXFGroupThread(0); + thread->m_threadKey = m_threadKey; + thread->m_threadRootKey = m_threadRootKey; + thread->m_numUnreadChildren = m_numUnreadChildren; + thread->m_flags = m_flags; + thread->m_newestMsgDate = m_newestMsgDate; + thread->m_dummy = m_dummy; + thread->m_sortOrder = m_sortOrder; + thread->m_keys = m_keys.Clone(); + thread->m_folders.SetCapacity(m_folders.Count()); + thread->m_folders.AppendObjects(m_folders); + return thread.forget(); +} nsMsgXFGroupThread::~nsMsgXFGroupThread() {} diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupThread.h thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.h --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupThread.h 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupThread.h 2024-03-15 16:03:03.000000000 +0000 @@ -19,8 +19,10 @@ public: friend class nsMsgGroupView; - nsMsgGroupThread(); - explicit nsMsgGroupThread(nsIMsgDatabase* db); + explicit nsMsgGroupThread(nsIMsgDatabase* db, + nsMsgViewSortOrderValue sortOrder); + + already_AddRefed Clone(); NS_DECL_NSIMSGTHREAD NS_DECL_ISUPPORTS @@ -28,7 +30,6 @@ protected: virtual ~nsMsgGroupThread(); - void Init(); nsMsgViewIndex AddChildFromGroupView(nsIMsgDBHdr* child, nsMsgDBView* view); nsresult RemoveChild(nsMsgKey msgKey); nsresult RerootThread(nsIMsgDBHdr* newParentOfOldRoot, nsIMsgDBHdr* oldRoot, @@ -61,11 +62,14 @@ nsTArray m_keys; bool m_dummy; // top level msg is a dummy, e.g., grouped by age. nsCOMPtr m_db; // should we make a weak ref or just a ptr? + nsMsgViewSortOrderValue m_sortOrder; }; class nsMsgXFGroupThread : public nsMsgGroupThread { public: - nsMsgXFGroupThread(); + explicit nsMsgXFGroupThread(nsMsgViewSortOrderValue sortOrder); + + already_AddRefed Clone(); NS_IMETHOD GetNumChildren(uint32_t* aNumChildren) override; NS_IMETHOD GetChildKeyAt(uint32_t aIndex, nsMsgKey* aResult) override; diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupView.cpp thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupView.cpp --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgGroupView.cpp 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgGroupView.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -91,14 +91,16 @@ NS_ENSURE_ARG_POINTER(aAgeBucket); PRTime dateOfMsg; + uint32_t rcvDateSecs; nsresult rv; - if (!rcvDate) - rv = aMsgHdr->GetDate(&dateOfMsg); - else { - uint32_t rcvDateSecs; + + // Silently return Date: instead if Received: is unavailable. + if (rcvDate) { rv = aMsgHdr->GetUint32Property("dateReceived", &rcvDateSecs); - Seconds2PRTime(rcvDateSecs, &dateOfMsg); + if (rcvDateSecs != 0) Seconds2PRTime(rcvDateSecs, &dateOfMsg); } + + if (!rcvDate || rcvDateSecs == 0) rv = aMsgHdr->GetDate(&dateOfMsg); NS_ENSURE_SUCCESS(rv, rv); PRTime currentTime = PR_Now(); @@ -241,7 +243,14 @@ } nsMsgGroupThread* nsMsgGroupView::CreateGroupThread(nsIMsgDatabase* db) { - return new nsMsgGroupThread(db); + nsMsgViewSortOrderValue threadSortOrder = nsMsgViewSortOrder::descending; + if (m_sortType == nsMsgViewSortType::byDate || + m_sortType == nsMsgViewSortType::byReceived) { + threadSortOrder = m_sortOrder; + } else { + m_db->GetDefaultSortOrder(&threadSortOrder); + } + return new nsMsgGroupThread(db, threadSortOrder); } nsMsgGroupThread* nsMsgGroupView::AddHdrToThread(nsIMsgDBHdr* msgHdr, @@ -456,8 +465,18 @@ // If grouped, we need to clone the group thread hash table. if (m_viewFlags & nsMsgViewFlagsType::kGroupBySort) { - for (auto iter = m_groupsTable.Iter(); !iter.Done(); iter.Next()) { - newMsgDBView->m_groupsTable.InsertOrUpdate(iter.Key(), iter.UserData()); + if (mIsXFVirtual) { + for (auto iter = m_groupsTable.Iter(); !iter.Done(); iter.Next()) { + newMsgDBView->m_groupsTable.InsertOrUpdate( + iter.Key(), + static_cast(iter.UserData())->Clone()); + } + } else { + for (auto iter = m_groupsTable.Iter(); !iter.Done(); iter.Next()) { + newMsgDBView->m_groupsTable.InsertOrUpdate( + iter.Key(), + static_cast(iter.UserData())->Clone()); + } } } return NS_OK; @@ -792,7 +811,7 @@ break; } case nsMsgViewSortType::bySubject: - FetchSubject(msgHdr, m_flags[aRow], aValue); + FetchSubject(msgHdr, m_flags[aRow] & ~nsMsgMessageFlags::HasRe, aValue); break; case nsMsgViewSortType::byAuthor: FetchAuthor(msgHdr, aValue); diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgSearchDBView.cpp thunderbird-115.9.0/comm/mailnews/base/src/nsMsgSearchDBView.cpp --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgSearchDBView.cpp 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgSearchDBView.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -97,6 +97,9 @@ newMsgDBView->mCommand = mCommand; newMsgDBView->mTotalIndices = mTotalIndices; newMsgDBView->mCurIndex = mCurIndex; + newMsgDBView->m_nextThreadId = m_nextThreadId; + newMsgDBView->m_totalMessagesInView = m_totalMessagesInView; + newMsgDBView->m_folders.InsertObjectsAt(m_folders, 0); newMsgDBView->m_curCustomColumn = m_curCustomColumn; for (auto const& hdrs : m_hdrsForEachFolder) { @@ -114,7 +117,9 @@ if (m_viewFlags & nsMsgViewFlagsType::kThreadedDisplay) { // We need to clone the thread and msg hdr hash tables. for (auto iter = m_threadsTable.Iter(); !iter.Done(); iter.Next()) { - newMsgDBView->m_threadsTable.InsertOrUpdate(iter.Key(), iter.UserData()); + newMsgDBView->m_threadsTable.InsertOrUpdate( + iter.Key(), static_cast(iter.UserData()) + ->Clone(newMsgDBView)); } for (auto iter = m_hdrsTable.Iter(); !iter.Done(); iter.Next()) { newMsgDBView->m_hdrsTable.InsertOrUpdate(iter.Key(), iter.UserData()); @@ -476,6 +481,8 @@ } else { // The new header is the root, so we need to adjust all the children. InsertMsgHdrAt(threadIndex, msgHdr, msgKey, msgFlags, 0); + OrExtraFlag(threadIndex, + MSG_VIEW_FLAG_HASCHILDREN | MSG_VIEW_FLAG_ISTHREAD); NoteChange(threadIndex, 1, nsMsgViewNotificationCode::insertOrDelete); nsMsgViewIndex i; @@ -1274,7 +1281,17 @@ nsMsgGroupThread* nsMsgSearchDBView::CreateGroupThread( nsIMsgDatabase* /* db */) { - return new nsMsgXFGroupThread(); + nsMsgViewSortOrderValue threadSortOrder = nsMsgViewSortOrder::descending; + if (m_sortType == nsMsgViewSortType::byDate || + m_sortType == nsMsgViewSortType::byReceived) { + threadSortOrder = m_sortOrder; + } else { + if (mozilla::Preferences::GetInt("mailnews.default_sort_order") == + nsMsgViewSortOrder::ascending) { + threadSortOrder = nsMsgViewSortOrder::ascending; + } + } + return new nsMsgXFGroupThread(threadSortOrder); } NS_IMETHODIMP diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgXFViewThread.cpp thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.cpp --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgXFViewThread.cpp 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -20,6 +20,20 @@ m_threadId = threadId; } +already_AddRefed nsMsgXFViewThread::Clone( + nsMsgSearchDBView* view) { + RefPtr thread = new nsMsgXFViewThread(view, m_threadId); + thread->m_numUnreadChildren = m_numUnreadChildren; + thread->m_numChildren = m_numChildren; + thread->m_flags = m_flags; + thread->m_newestMsgDate = m_newestMsgDate; + thread->m_keys = m_keys.Clone(); + thread->m_folders.SetCapacity(m_folders.Count()); + thread->m_folders.AppendObjects(m_folders); + thread->m_levels = m_levels.Clone(); + return thread.forget(); +} + nsMsgXFViewThread::~nsMsgXFViewThread() {} NS_IMETHODIMP @@ -280,7 +294,7 @@ for (uint32_t childIndex = 0; childIndex < m_keys.Length(); childIndex++) { if (m_keys[childIndex] == msgKey && m_folders[childIndex] == msgFolder) { - uint8_t levelRemoved = m_keys[childIndex]; + uint8_t levelRemoved = m_levels[childIndex]; // Adjust the levels of all the children of this header. nsMsgViewIndex i; for (i = childIndex + 1; diff -Nru thunderbird-115.8.0/comm/mailnews/base/src/nsMsgXFViewThread.h thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.h --- thunderbird-115.8.0/comm/mailnews/base/src/nsMsgXFViewThread.h 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/src/nsMsgXFViewThread.h 2024-03-15 16:03:03.000000000 +0000 @@ -20,6 +20,8 @@ public: nsMsgXFViewThread(nsMsgSearchDBView* view, nsMsgKey threadId); + already_AddRefed Clone(nsMsgSearchDBView* view); + NS_DECL_NSIMSGTHREAD NS_DECL_ISUPPORTS diff -Nru thunderbird-115.8.0/comm/mailnews/base/test/unit/test_accountMgr2.js thunderbird-115.9.0/comm/mailnews/base/test/unit/test_accountMgr2.js --- thunderbird-115.8.0/comm/mailnews/base/test/unit/test_accountMgr2.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/base/test/unit/test_accountMgr2.js 2024-03-15 16:03:03.000000000 +0000 @@ -159,6 +159,7 @@ "should find ACE server by normalized IDN hostname" ); + /** skip for 115 - the idl string types do not allow this to work. // Test that an account with IDN hostname entered is found. const acc6 = MailServices.accounts.createAccount(); acc6.incomingServer = MailServices.accounts.createIncomingServer( @@ -196,4 +197,5 @@ idnServer2?.hostName, "should find idn server by by ACE encodeed uri" ); + */ }); diff -Nru thunderbird-115.8.0/comm/mailnews/compose/src/SmtpClient.jsm thunderbird-115.9.0/comm/mailnews/compose/src/SmtpClient.jsm --- thunderbird-115.8.0/comm/mailnews/compose/src/SmtpClient.jsm 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/compose/src/SmtpClient.jsm 2024-03-15 16:03:03.000000000 +0000 @@ -30,7 +30,7 @@ var { AppConstants } = ChromeUtils.importESModule( "resource://gre/modules/AppConstants.sys.mjs" ); -var { setTimeout } = ChromeUtils.importESModule( +var { setTimeout, clearTimeout } = ChromeUtils.importESModule( "resource://gre/modules/Timer.sys.mjs" ); var { MailStringUtils } = ChromeUtils.import( @@ -47,6 +47,12 @@ /** * The number of RCPT TO commands sent on the connection by this client. * This can count-up over multiple messages. + * Per RFC, the minimum total number of recipients that MUST be buffered + * is 100 recipients. + * + * @see https://datatracker.ietf.org/doc/html/rfc5321#section-4.5.3.1.8 + * When 100 or more recipients have been counted on a connection, a new + * connection will be established to handle the additional recipients. */ rcptCount = 0; @@ -56,6 +62,11 @@ isRetry = false; /** + * Becomes false when either recipient or message count reaches their limit. + */ + reuseConnection = true; + + /** * Creates a connection object to a SMTP server and allows to send mail through it. * Call `connect` method to inititate the actual connection, the constructor only * defines the properties but does not actually connect. @@ -140,8 +151,19 @@ this.socket.onerror = this._onError; this.socket.onopen = this._onOpen; + + // Reset these counters when a new connection is opened. When the number + // of messages sent or the number of recipients for the messages reaches + // their respective threshold, a new connection will be established. + this._numMessages = 0; + this.rcptCount = 0; } this._freed = false; + const msgsPerConn = this._server._getIntPrefWithDefault( + "max_messages_per_connection", + 10 + ); + this._messagesPerConnection = msgsPerConn > 0 ? msgsPerConn : 0; } /** @@ -149,7 +171,6 @@ */ quit() { this._authenticating = false; - this._freed = true; this._sendCommand("QUIT"); this._currentAction = this.close; } @@ -191,6 +212,13 @@ * @param {boolean} envelope.messageId - The message id. */ useEnvelope(envelope) { + // First on a new message, clear the QUIT timer if it's running. + if (this._quitTimer) { + this.logger.debug("Clearing QUIT timer"); + clearTimeout(this._quitTimer); + this._quitTimer = null; + } + this._envelope = envelope || {}; this._envelope.from = [].concat( this._envelope.from || "anonymous@" + this._getHelloArgument() @@ -549,7 +577,6 @@ _onClose = () => { this.logger.debug("Socket closed."); this._free(); - this.rcptCount = 0; if (this._authenticating) { // In some cases, socket is closed for invalid username/password. this._onAuthFailed({ data: "Socket closed." }); @@ -1329,6 +1356,36 @@ this.logger.debug("Message sent successfully."); this.isRetry = false; } + this._numMessages++; // Number of messages sent on current connection. + + // Recipient count has reached the limit or message count per connection + // is enabled and has reached the limit, set flag to cause QUIT to be + // sent by onFree() called below. + if ( + this.rcptCount > 99 || + (this._messagesPerConnection > 0 && + this._numMessages >= this._messagesPerConnection) + ) { + this.reuseConnection = false; + } + + // If reuseConnection is set false above, don't start the QUIT timer + // below since the connection will be closed and a new connection + // established. + // If reuseConnection is true, the timer will be started. It will only + // timeout and send QUIT if another message is NOT sent within the set + // time. Also, if another send becomes active right before the timeout + // occurs, don't send the QUIT. + if (this.reuseConnection) { + this._server.sendIsActive = false; + this.logger.debug("Start 5 second QUIT timer"); + this._quitTimer = setTimeout(() => { + if (this.socket?.readyState == "open" && !this._server.sendIsActive) { + this.quit(); + } + this._quitTimer = null; + }, 5000); + } this._currentAction = this._actionIdle; if (command.success) { diff -Nru thunderbird-115.8.0/comm/mailnews/compose/src/SmtpServer.jsm thunderbird-115.9.0/comm/mailnews/compose/src/SmtpServer.jsm --- thunderbird-115.8.0/comm/mailnews/compose/src/SmtpServer.jsm 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/compose/src/SmtpServer.jsm 2024-03-15 16:03:03.000000000 +0000 @@ -206,18 +206,20 @@ } /** - * If pref max_cached_connection is set to less than 1, allow only one - * connection and one message to be sent on that connection. Otherwise, allow - * up to max_cached_connection (default to 3) with each connection allowed to - * send multiple messages. + * Obtain the user configured number of simultaneous SMTP connections per + * server that will be allowed. If pref set to 0 or less, allow 1 connection. + * + * Note: Currently the pref setting is ignored and the number of connections + * per server is set to 1 here. The code to allow multiple connections + * remains in place if needed in the future. */ get maximumConnectionsNumber() { let maxConnections = this._getIntPrefWithDefault( "max_cached_connections", - 3 + 1 ); - // Always return a value >= 0. - return maxConnections > 0 ? maxConnections : 0; + // return maxConnections < 1 ? 1 : maxConnections; + return maxConnections ? 1 : 1; } set maximumConnectionsNumber(value) { @@ -493,18 +495,13 @@ * instance, and do some actions. */ async withClient(handler) { + // Flag that a send is progress. Precludes sending QUIT during the transfer. + this.sendIsActive = true; let client = await this._getNextClient(); client.onFree = () => { this._busyConnections = this._busyConnections.filter(c => c != client); - // Per RFC, the minimum total number of recipients that MUST be buffered - // is 100 recipients. - // @see https://datatracker.ietf.org/doc/html/rfc5321#section-4.5.3.1.8 - // So use a new connection for the next message to avoid running into - // recipient limits. - // If user has set SMTP pref max_cached_connection to less than 1, - // use a new connection for each message. - if (this.maximumConnectionsNumber == 0 || client.rcptCount > 99) { - // Send QUIT, server will then terminate the connection + // Check if the connection should be terminated by doing smtp QUIT + if (!client.reuseConnection) { client.quit(); } else { // Keep using this connection diff -Nru thunderbird-115.8.0/comm/mailnews/compose/src/SmtpService.jsm thunderbird-115.9.0/comm/mailnews/compose/src/SmtpService.jsm --- thunderbird-115.8.0/comm/mailnews/compose/src/SmtpService.jsm 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/compose/src/SmtpService.jsm 2024-03-15 16:03:03.000000000 +0000 @@ -109,7 +109,7 @@ let fresh = true; client.onidle = () => { // onidle can occur multiple times, but we should only init sending - // when sending a new message(fresh is true) or when a new connection + // when sending a new message (fresh is true) or when a new connection // replaces the original connection due to error 4xx response // (client.isRetry is true). if (!fresh && !client.isRetry) { diff -Nru thunderbird-115.8.0/comm/mailnews/db/msgdb/src/nsMsgDatabase.cpp thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgDatabase.cpp --- thunderbird-115.8.0/comm/mailnews/db/msgdb/src/nsMsgDatabase.cpp 2024-02-16 23:38:53.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgDatabase.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -2636,11 +2636,27 @@ // use raw flags instead of GetFlags, because GetFlags will // pay attention to what's in m_newSet, and this new hdr isn't // in m_newSet yet. + + // do this after we've put the new hdr in the thread + nsCOMPtr thread; + uint32_t threadFlags = 0; + nsresult rv = GetThreadContainingMsgHdr(hdr, getter_AddRefs(thread)); + if (NS_SUCCEEDED(rv)) { + thread->GetFlags(&threadFlags); + } + bool isIgnored = false; + hdr->GetIsKilled(&isIgnored); + isIgnored |= threadFlags & nsMsgMessageFlags::Ignored; + if (flags & nsMsgMessageFlags::New) { uint32_t newFlags; newHdr->AndFlags(~nsMsgMessageFlags::New, &newFlags); // make sure not filed out - AddToNewList(key); + if (!isIgnored) { + AddToNewList(key); + } else { + flags &= ~nsMsgMessageFlags::New; + } } if (m_dbFolderInfo) { m_dbFolderInfo->ChangeNumMessages(1); @@ -2651,6 +2667,15 @@ } err = m_mdbAllMsgHeadersTable->AddRow(GetEnv(), hdr->GetMDBRow()); + + if (isIgnored) { + AutoTArray, 1> msg; + msg.AppendElement(newHdr); + // This marks the message as read and, in the case of an IMAP folder, + // synchronizes its flags. + m_folder->MarkMessagesRead(msg, true); + } + if (notify) { nsMsgKey threadParent; diff -Nru thunderbird-115.8.0/comm/mailnews/db/msgdb/src/nsMsgThread.cpp thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgThread.cpp --- thunderbird-115.8.0/comm/mailnews/db/msgdb/src/nsMsgThread.cpp 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/db/msgdb/src/nsMsgThread.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -355,11 +355,6 @@ m_mdbTable->MoveRow(m_mdbDB->GetEnv(), hdrRow, -1, moveIndex, &outPos); } - // do this after we've put the new hdr in the thread - bool isKilled; - child->GetIsKilled(&isKilled); - if ((m_flags & nsMsgMessageFlags::Ignored || isKilled) && m_mdbDB) - m_mdbDB->MarkHdrRead(child, true, nullptr); #ifdef DEBUG_David_Bienvenu nsMsgKey msgHdrThreadKey; child->GetThreadId(&msgHdrThreadKey); diff -Nru thunderbird-115.8.0/comm/mailnews/extensions/smime/nsMsgComposeSecure.cpp thunderbird-115.9.0/comm/mailnews/extensions/smime/nsMsgComposeSecure.cpp --- thunderbird-115.8.0/comm/mailnews/extensions/smime/nsMsgComposeSecure.cpp 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/extensions/smime/nsMsgComposeSecure.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -1188,6 +1188,19 @@ // search for a valid certificate for (node = CERT_LIST_HEAD(certlist); !CERT_LIST_END(node, certlist); node = CERT_LIST_NEXT(node)) { + // TODO: Replace this block with: + // if (!NSS_CMSRecipient_IsSupported(cert)) { continue; } + CERTSubjectPublicKeyInfo* spki = &(node->cert->subjectPublicKeyInfo); + SECOidTag certalgtag = SECOID_GetAlgorithmTag(&(spki->algorithm)); + switch (certalgtag) { + case SEC_OID_PKCS1_RSA_ENCRYPTION: + case SEC_OID_X942_DIFFIE_HELMAN_KEY: /* dh-public-number */ + break; + default: + // Not supported + continue; + } + nsTArray certBytes(node->cert->derCert.data, node->cert->derCert.len); nsTArray> unusedCertChain; diff -Nru thunderbird-115.8.0/comm/mailnews/local/public/nsIPop3Sink.idl thunderbird-115.9.0/comm/mailnews/local/public/nsIPop3Sink.idl --- thunderbird-115.8.0/comm/mailnews/local/public/nsIPop3Sink.idl 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/local/public/nsIPop3Sink.idl 2024-03-15 16:03:03.000000000 +0000 @@ -26,7 +26,7 @@ void incorporateBegin(in string uidlString, in unsigned long flags); void incorporateWrite(in string block, in long length); void incorporateComplete(in nsIMsgWindow aMsgWindow, in int32_t aSize); - void incorporateAbort(in boolean uidlDownload); + void incorporateAbort(); /** * Tell the pop3sink how many messages we're going to download. diff -Nru thunderbird-115.8.0/comm/mailnews/local/src/Pop3Client.jsm thunderbird-115.9.0/comm/mailnews/local/src/Pop3Client.jsm --- thunderbird-115.8.0/comm/mailnews/local/src/Pop3Client.jsm 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/local/src/Pop3Client.jsm 2024-03-15 16:03:03.000000000 +0000 @@ -1300,6 +1300,7 @@ this._sink.incorporateWrite(line, line.length); } catch (e) { this._actionError("pop3MessageWriteError"); + this._sink.incorporateAbort(); throw e; // Stop reading. } }, diff -Nru thunderbird-115.8.0/comm/mailnews/local/src/nsPop3Sink.cpp thunderbird-115.9.0/comm/mailnews/local/src/nsPop3Sink.cpp --- thunderbird-115.8.0/comm/mailnews/local/src/nsPop3Sink.cpp 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/local/src/nsPop3Sink.cpp 2024-03-15 16:03:03.000000000 +0000 @@ -657,7 +657,7 @@ } NS_IMETHODIMP -nsPop3Sink::IncorporateAbort(bool uidlDownload) { +nsPop3Sink::IncorporateAbort() { NS_ENSURE_STATE(m_outFileStream); nsresult rv = m_outFileStream->Close(); NS_ENSURE_SUCCESS(rv, rv); diff -Nru thunderbird-115.8.0/comm/mailnews/mailnews.js thunderbird-115.9.0/comm/mailnews/mailnews.js --- thunderbird-115.8.0/comm/mailnews/mailnews.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/mailnews.js 2024-03-15 16:03:03.000000000 +0000 @@ -528,7 +528,18 @@ // https://bugzilla.mozilla.org/show_bug.cgi?id=1565379 pref("mail.server.default.clientidEnabled", false); pref("mail.smtpserver.default.clientidEnabled", false); -pref("mail.smtpserver.default.max_cached_connections", 3); + +// This limits the number of simultaneous SMTP connection to a server. +// Currently if this is set to other than 1, it is changed to 1 internally, so +// only 1 connection per server can actually occur. +pref("mail.smtpserver.default.max_cached_connections", 1); + +// If set greater than 0, this limits the number of messages that can be sent +// serially on an SMTP connection before the connection is closed and a new +// connection is established to handle any additional messages, also subject to +// this limit. Setting this to zero or less removes any message count per +// connection limit. +pref("mail.smtpserver.default.max_messages_per_connection", 10); pref("mail.smtpservers", ""); pref("mail.accountmanager.accounts", ""); diff -Nru thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_decrypt.js thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt.js --- thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_decrypt.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt.js 2024-03-15 16:03:03.000000000 +0000 @@ -85,6 +85,7 @@ this._expectedEvents = maxLen; this.countReceived = 0; this._results = []; + this._resultsProduced = false; this.haveSignedBad = false; this.haveEncryptionBad = false; this.resultSig = null; @@ -137,7 +138,8 @@ this.checkFinished(); }, checkFinished() { - if (this.countReceived == this._expectedEvents) { + if (!this._resultsProduced && this.countReceived == this._expectedEvents) { + this._resultsProduced = true; if (this.resultSigFirst) { this._results.push(this.resultSig); if (this.resultEnc != null) { diff -Nru thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_decrypt_allow_sha1.js thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt_allow_sha1.js --- thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_decrypt_allow_sha1.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_decrypt_allow_sha1.js 2024-03-15 16:03:03.000000000 +0000 @@ -105,6 +105,7 @@ this._expectedEvents = maxLen; this.countReceived = 0; this._results = []; + this._resultsProduced = false; this.haveSignedBad = false; this.haveEncryptionBad = false; this.resultSig = null; @@ -157,7 +158,8 @@ this.checkFinished(); }, checkFinished() { - if (this.countReceived == this._expectedEvents) { + if (!this._resultsProduced && this.countReceived == this._expectedEvents) { + this._resultsProduced = true; if (this.resultSigFirst) { this._results.push(this.resultSig); if (this.resultEnc != null) { diff -Nru thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_perm_decrypt.js thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_perm_decrypt.js --- thunderbird-115.8.0/comm/mailnews/mime/test/unit/test_smime_perm_decrypt.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/mime/test/unit/test_smime_perm_decrypt.js 2024-03-15 16:03:03.000000000 +0000 @@ -92,6 +92,7 @@ this._expectedEvents = maxLen; this.countReceived = 0; this._results = []; + this._resultsProduced = false; this.haveSignedBad = false; this.haveEncryptionBad = false; this.resultSig = null; @@ -144,7 +145,8 @@ this.checkFinished(); }, checkFinished() { - if (this.countReceived == this._expectedEvents) { + if (!this._resultsProduced && this.countReceived == this._expectedEvents) { + this._resultsProduced = true; if (this.resultSigFirst) { if (this.resultSig) { this._results.push(this.resultSig); @@ -179,7 +181,10 @@ * is encrypted. */ -var gMessages = [{ filename: "alice.env.eml", enc: true }]; +var gMessages = [ + { filename: "alice.env.eml", enc: true, sig: false }, + { filename: "alice.sig.SHA256.opaque.env.eml", enc: true, sig: true }, +]; var gDecFolder; @@ -211,9 +216,13 @@ for (let msg of gMessages) { console.log("checking " + msg.filename); - let numExpected = 1; - - let eventsExpected = numExpected; + let eventsExpected = 0; + if (msg.enc) { + eventsExpected++; + } + if (msg.sig) { + eventsExpected++; + } let hdr = mailTestUtils.getMsgHdrN(gInbox, hdrIndex); let uri = hdr.folder.getUriForMsg(hdr); @@ -231,7 +240,7 @@ await sinkPromise; let r = smimeHeaderSink._results; - Assert.equal(r.length, numExpected); + Assert.equal(r.length, eventsExpected); if (msg.enc) { Assert.equal(r[0].type, "encrypted"); @@ -247,6 +256,9 @@ ); eventsExpected = 0; + if (msg.sig) { + eventsExpected++; + } hdr = mailTestUtils.getMsgHdrN(gDecFolder, hdrIndex); uri = hdr.folder.getUriForMsg(hdr); @@ -266,8 +278,12 @@ smimeHeaderSink.checkFinished(); await sinkPromise; - // If the result length is 0, it wasn't decrypted. - Assert.equal(smimeHeaderSink._results.length, 0); + r = smimeHeaderSink._results; + Assert.equal(r.length, eventsExpected); + + if (msg.sig) { + Assert.equal(r[0].type, "signed"); + } hdrIndex++; } diff -Nru thunderbird-115.8.0/comm/mailnews/search/content/searchWidgets.js thunderbird-115.9.0/comm/mailnews/search/content/searchWidgets.js --- thunderbird-115.8.0/comm/mailnews/search/content/searchWidgets.js 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/mailnews/search/content/searchWidgets.js 2024-03-15 16:03:03.000000000 +0000 @@ -747,10 +747,12 @@ switch (type) { case "text": input = document.createElement("input"); + input.type = "text"; input.classList.add("input-inline", "search-value-input"); break; case "date": input = document.createElement("input"); + input.type = "text"; input.classList.add("input-inline", "search-value-input"); if (!value) { // Newly created date input shows today's date. diff -Nru thunderbird-115.8.0/comm/taskcluster/docker/tb-flatpak/org.mozilla.Thunderbird.appdata.xml.in thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/org.mozilla.Thunderbird.appdata.xml.in --- thunderbird-115.8.0/comm/taskcluster/docker/tb-flatpak/org.mozilla.Thunderbird.appdata.xml.in 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/org.mozilla.Thunderbird.appdata.xml.in 2024-03-15 16:03:03.000000000 +0000 @@ -69,8 +69,12 @@ https://www.thunderbird.net/contact/ - https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_1.png - https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_2.png + + https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_1.png + + + https://raw.githubusercontent.com/thunderbird/flatpak-screenshots/main/image_2.png + diff -Nru thunderbird-115.8.0/comm/taskcluster/docker/tb-flatpak/runme.sh thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/runme.sh --- thunderbird-115.8.0/comm/taskcluster/docker/tb-flatpak/runme.sh 2024-02-16 23:38:54.000000000 +0000 +++ thunderbird-115.9.0/comm/taskcluster/docker/tb-flatpak/runme.sh 2024-03-15 16:03:03.000000000 +0000 @@ -166,6 +166,7 @@ --socket=cups \ --require-version=0.10.3 \ --persist=.thunderbird \ + --env=DICPATH=/usr/share/hunspell \ --filesystem=xdg-download:rw \ --filesystem=~/.gnupg \ --filesystem=xdg-run/gnupg:ro \ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/config/external/icu/data/icudt73l.dat and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/config/external/icu/data/icudt73l.dat differ diff -Nru thunderbird-115.8.0/config/milestone.txt thunderbird-115.9.0/config/milestone.txt --- thunderbird-115.8.0/config/milestone.txt 2024-02-16 23:38:24.000000000 +0000 +++ thunderbird-115.9.0/config/milestone.txt 2024-03-15 16:02:31.000000000 +0000 @@ -10,4 +10,4 @@ # hardcoded milestones in the tree from these two files. #-------------------------------------------------------- -115.8.0 +115.9.0 diff -Nru thunderbird-115.8.0/debian/changelog thunderbird-115.9.0/debian/changelog --- thunderbird-115.8.0/debian/changelog 2024-02-21 17:33:54.000000000 +0000 +++ thunderbird-115.9.0/debian/changelog 2024-03-19 17:40:55.000000000 +0000 @@ -1,3 +1,37 @@ +thunderbird (1:115.9.0-1~deb12u1) bookworm-security; urgency=medium + + * Rebuild for bookworm-security + + -- Carsten Schoenert Tue, 19 Mar 2024 18:40:55 +0100 + +thunderbird (1:115.9.0-1) unstable; urgency=medium + + * [c122f7d] New upstream version 115.9.0 + Fixed CVE issues in upstream version 115.9 (MFSA 2024-14): + CVE-2024-0743: Crash in NSS TLS method + CVE-2024-2607: JIT code failed to save return registers on Armv7-A + CVE-2024-2608: Integer overflow could have led to out of bounds write + CVE-2024-2616: Improve handling of out-of-memory conditions in ICU + CVE-2023-5388: NSS susceptible to timing attack against RSA decryption + CVE-2024-2610: Improper handling of html and body tags enabled CSP nonce + leakage + CVE-2024-2611: Clickjacking vulnerability could have led to a user + accidentally granting permissions + CVE-2024-2612: Self referencing object could have potentially led to a + use-after-free + CVE-2024-2614: Memory safety bugs fixed in Firefox 124, Firefox ESR 115.9, + and Thunderbird 115.9 + + -- Carsten Schoenert Tue, 19 Mar 2024 16:55:17 +0100 + +thunderbird (1:115.8.1-1) unstable; urgency=medium + + * [b9b4842] New upstream version 115.8.1 + Fixed CVE issues in upstream version 115.8.1 (MFSA 2024-11): + CVE-2024-1936: Leaking of encrypted email subjects to other conversations + + -- Carsten Schoenert Mon, 04 Mar 2024 19:13:14 +0100 + thunderbird (1:115.8.0-1~deb12u1) bookworm-security; urgency=medium * Rebuild for bookworm-security diff -Nru thunderbird-115.8.0/dom/base/nsContentUtils.cpp thunderbird-115.9.0/dom/base/nsContentUtils.cpp --- thunderbird-115.8.0/dom/base/nsContentUtils.cpp 2024-02-16 23:38:26.000000000 +0000 +++ thunderbird-115.9.0/dom/base/nsContentUtils.cpp 2024-03-15 16:02:32.000000000 +0000 @@ -8951,13 +8951,19 @@ TextFragmentWithEncode, }; + struct LiteralSpan { + const char16_t* mData; + uint32_t mLength; + + Span AsSpan() { return Span(mData, mLength); } + }; + union { nsAtom* mAtom; - const char16_t* mLiteral; + LiteralSpan mLiteral; nsString mString; const nsTextFragment* mTextFragment; }; - uint32_t mLength = 0; Type mType = Type::Unknown; }; @@ -8987,17 +8993,15 @@ u->mAtom = aAtom; u->mType = Unit::Type::Atom; uint32_t len = aAtom->GetLength(); - u->mLength = len; mLength += len; } template void Append(const char16_t (&aLiteral)[N]) { + constexpr uint32_t len = N - 1; Unit* u = AddUnit(); - u->mLiteral = aLiteral; + u->mLiteral = {aLiteral, len}; u->mType = Unit::Type::Literal; - uint32_t len = N - 1; - u->mLength = len; mLength += len; } @@ -9006,15 +9010,14 @@ uint32_t len = aString.Length(); new (&u->mString) nsString(std::move(aString)); u->mType = Unit::Type::String; - u->mLength = len; mLength += len; } - void AppendWithAttrEncode(nsString&& aString, uint32_t aLen) { + // aLen can be !isValid(), which will get propagated into mLength. + void AppendWithAttrEncode(nsString&& aString, CheckedInt aLen) { Unit* u = AddUnit(); new (&u->mString) nsString(std::move(aString)); u->mType = Unit::Type::StringWithEncode; - u->mLength = aLen; mLength += aLen; } @@ -9023,15 +9026,15 @@ u->mTextFragment = aTextFragment; u->mType = Unit::Type::TextFragment; uint32_t len = aTextFragment->GetLength(); - u->mLength = len; mLength += len; } - void AppendWithEncode(const nsTextFragment* aTextFragment, uint32_t aLen) { + // aLen can be !isValid(), which will get propagated into mLength. + void AppendWithEncode(const nsTextFragment* aTextFragment, + CheckedInt aLen) { Unit* u = AddUnit(); u->mTextFragment = aTextFragment; u->mType = Unit::Type::TextFragmentWithEncode; - u->mLength = aLen; mLength += aLen; } @@ -9062,7 +9065,7 @@ EncodeAttrString(u.mString, appender); break; case Unit::Type::Literal: - appender.Append(Span(u.mLiteral, u.mLength)); + appender.Append(u.mLiteral.AsSpan()); break; case Unit::Type::TextFragment: if (u.mTextFragment->Is2b()) { @@ -9187,7 +9190,7 @@ static void AppendEncodedCharacters(const nsTextFragment* aText, StringBuilder& aBuilder) { - uint32_t extraSpaceNeeded = 0; + uint32_t numEncodedChars = 0; uint32_t len = aText->GetLength(); if (aText->Is2b()) { const char16_t* data = aText->Get2b(); @@ -9195,16 +9198,10 @@ const char16_t c = data[i]; switch (c) { case '<': - extraSpaceNeeded += ArrayLength("<") - 2; - break; case '>': - extraSpaceNeeded += ArrayLength(">") - 2; - break; case '&': - extraSpaceNeeded += ArrayLength("&") - 2; - break; case 0x00A0: - extraSpaceNeeded += ArrayLength(" ") - 2; + ++numEncodedChars; break; default: break; @@ -9216,16 +9213,10 @@ const unsigned char c = data[i]; switch (c) { case '<': - extraSpaceNeeded += ArrayLength("<") - 2; - break; case '>': - extraSpaceNeeded += ArrayLength(">") - 2; - break; case '&': - extraSpaceNeeded += ArrayLength("&") - 2; - break; case 0x00A0: - extraSpaceNeeded += ArrayLength(" ") - 2; + ++numEncodedChars; break; default: break; @@ -9233,28 +9224,37 @@ } } - if (extraSpaceNeeded) { - aBuilder.AppendWithEncode(aText, len + extraSpaceNeeded); + if (numEncodedChars) { + // For simplicity, conservatively estimate the size of the string after + // encoding. This will result in reserving more memory than we actually + // need, but that should be fine unless the string has an enormous number of + // eg < in it. We subtract 1 for the null terminator, then 1 more for the + // existing character that will be replaced. + constexpr uint32_t maxCharExtraSpace = + std::max({ArrayLength("<"), ArrayLength(">"), + ArrayLength("&"), ArrayLength(" ")}) - + 2; + static_assert(maxCharExtraSpace < 100, "Possible underflow"); + CheckedInt maxExtraSpace = + CheckedInt(numEncodedChars) * maxCharExtraSpace; + aBuilder.AppendWithEncode(aText, maxExtraSpace + len); } else { aBuilder.Append(aText); } } -static uint32_t ExtraSpaceNeededForAttrEncoding(const nsAString& aValue) { +static CheckedInt ExtraSpaceNeededForAttrEncoding( + const nsAString& aValue) { const char16_t* c = aValue.BeginReading(); const char16_t* end = aValue.EndReading(); - uint32_t extraSpaceNeeded = 0; + uint32_t numEncodedChars = 0; while (c < end) { switch (*c) { case '"': - extraSpaceNeeded += ArrayLength(""") - 2; - break; case '&': - extraSpaceNeeded += ArrayLength("&") - 2; - break; case 0x00A0: - extraSpaceNeeded += ArrayLength(" ") - 2; + ++numEncodedChars; break; default: break; @@ -9262,19 +9262,33 @@ ++c; } - return extraSpaceNeeded; + if (!numEncodedChars) { + return 0; + } + + // For simplicity, conservatively estimate the size of the string after + // encoding. This will result in reserving more memory than we actually + // need, but that should be fine unless the string has an enormous number of + // & in it. We subtract 1 for the null terminator, then 1 more for the + // existing character that will be replaced. + constexpr uint32_t maxCharExtraSpace = + std::max({ArrayLength("""), ArrayLength("&"), + ArrayLength(" ")}) - + 2; + static_assert(maxCharExtraSpace < 100, "Possible underflow"); + return CheckedInt(numEncodedChars) * maxCharExtraSpace; } static void AppendEncodedAttributeValue(const nsAttrValue& aValue, StringBuilder& aBuilder) { if (nsAtom* atom = aValue.GetStoredAtom()) { nsDependentAtomString atomStr(atom); - uint32_t space = ExtraSpaceNeededForAttrEncoding(atomStr); - if (!space) { + auto space = ExtraSpaceNeededForAttrEncoding(atomStr); + if (space.isValid() && !space.value()) { aBuilder.Append(atom); } else { aBuilder.AppendWithAttrEncode(nsString(atomStr), - atomStr.Length() + space); + space + atomStr.Length()); } return; } @@ -9282,9 +9296,9 @@ // nsStringBuffer. nsString str; aValue.ToString(str); - uint32_t space = ExtraSpaceNeededForAttrEncoding(str); - if (space) { - aBuilder.AppendWithAttrEncode(std::move(str), str.Length() + space); + auto space = ExtraSpaceNeededForAttrEncoding(str); + if (!space.isValid() || space.value()) { + aBuilder.AppendWithAttrEncode(std::move(str), space + str.Length()); } else { aBuilder.Append(std::move(str)); } diff -Nru thunderbird-115.8.0/dom/indexedDB/SafeRefPtr.h thunderbird-115.9.0/dom/indexedDB/SafeRefPtr.h --- thunderbird-115.8.0/dom/indexedDB/SafeRefPtr.h 2024-02-16 23:38:26.000000000 +0000 +++ thunderbird-115.9.0/dom/indexedDB/SafeRefPtr.h 2024-03-15 16:02:33.000000000 +0000 @@ -219,8 +219,7 @@ aOther.mRawPtr = nullptr; } SafeRefPtr& operator=(SafeRefPtr&& aOther) noexcept { - assign_assuming_AddRef(aOther.mRawPtr); - aOther.mRawPtr = nullptr; + assign_assuming_AddRef(aOther.forget().take()); return *this; } diff -Nru thunderbird-115.8.0/dom/media/platforms/wrappers/MediaChangeMonitor.cpp thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.cpp --- thunderbird-115.8.0/dom/media/platforms/wrappers/MediaChangeMonitor.cpp 2024-02-16 23:38:26.000000000 +0000 +++ thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.cpp 2024-03-15 16:02:33.000000000 +0000 @@ -519,6 +519,10 @@ mDecoderInitialized = true; mConversionRequired = Some(mDecoder->NeedsConversion()); mCanRecycleDecoder = Some(CanRecycleDecoder()); + if (mPendingSeekThreshold) { + mDecoder->SetSeekThreshold(*mPendingSeekThreshold); + mPendingSeekThreshold.reset(); + } } return mInitPromise.ResolveOrRejectIfExists(std::move(aValue), __func__); @@ -686,11 +690,19 @@ } void MediaChangeMonitor::SetSeekThreshold(const media::TimeUnit& aTime) { - if (mDecoder) { - mDecoder->SetSeekThreshold(aTime); - } else { - MediaDataDecoder::SetSeekThreshold(aTime); - } + GetCurrentSerialEventTarget()->Dispatch(NS_NewRunnableFunction( + "MediaChangeMonitor::SetSeekThreshold", + [self = RefPtr(this), time = aTime, this] { + // During the shutdown. + if (mShutdownPromise) { + return; + } + if (mDecoder && mDecoderInitialized) { + mDecoder->SetSeekThreshold(time); + } else { + mPendingSeekThreshold = Some(time); + } + })); } RefPtr @@ -744,6 +756,11 @@ mConversionRequired = Some(mDecoder->NeedsConversion()); mCanRecycleDecoder = Some(CanRecycleDecoder()); + if (mPendingSeekThreshold) { + mDecoder->SetSeekThreshold(*mPendingSeekThreshold); + mPendingSeekThreshold.reset(); + } + if (!mFlushPromise.IsEmpty()) { // A Flush is pending, abort the current operation. mFlushPromise.Resolve(true, __func__); diff -Nru thunderbird-115.8.0/dom/media/platforms/wrappers/MediaChangeMonitor.h thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.h --- thunderbird-115.8.0/dom/media/platforms/wrappers/MediaChangeMonitor.h 2024-02-16 23:38:26.000000000 +0000 +++ thunderbird-115.9.0/dom/media/platforms/wrappers/MediaChangeMonitor.h 2024-03-15 16:02:33.000000000 +0000 @@ -135,6 +135,8 @@ Maybe mConversionRequired; bool mDecoderInitialized = false; const CreateDecoderParamsForAsync mParams; + // Keep any seek threshold set for after decoder creation and initialization. + Maybe mPendingSeekThreshold; }; } // namespace mozilla diff -Nru thunderbird-115.8.0/gfx/thebes/SharedFontList.cpp thunderbird-115.9.0/gfx/thebes/SharedFontList.cpp --- thunderbird-115.8.0/gfx/thebes/SharedFontList.cpp 2024-02-16 23:38:27.000000000 +0000 +++ thunderbird-115.9.0/gfx/thebes/SharedFontList.cpp 2024-03-15 16:02:34.000000000 +0000 @@ -168,7 +168,11 @@ void Face::SetCharacterMap(FontList* aList, gfxCharacterMap* aCharMap, const Family* aFamily) { if (!XRE_IsParentProcess()) { - std::pair familyIndex = aFamily->FindIndex(aList); + Maybe> familyIndex = aFamily->FindIndex(aList); + if (!familyIndex) { + NS_WARNING("Family index not found! Ignoring SetCharacterMap"); + return; + } const auto* faces = aFamily->Faces(aList); uint32_t faceIndex = 0; while (faceIndex < aFamily->NumFaces()) { @@ -177,14 +181,17 @@ } ++faceIndex; } - MOZ_RELEASE_ASSERT(faceIndex < aFamily->NumFaces(), "Face ptr not found!"); + if (faceIndex >= aFamily->NumFaces()) { + NS_WARNING("Face not found in family! Ignoring SetCharacterMap"); + return; + } if (NS_IsMainThread()) { dom::ContentChild::GetSingleton()->SendSetCharacterMap( - aList->GetGeneration(), familyIndex.first, familyIndex.second, + aList->GetGeneration(), familyIndex->first, familyIndex->second, faceIndex, *aCharMap); } else { NS_DispatchToMainThread(new SetCharMapRunnable( - aList->GetGeneration(), familyIndex, faceIndex, aCharMap)); + aList->GetGeneration(), familyIndex.value(), faceIndex, aCharMap)); } return; } @@ -629,16 +636,20 @@ if (!XRE_IsParentProcess()) { // |this| could be a Family record in either the Families() or Aliases() // arrays; FindIndex will map it back to its index and which array. - std::pair index = FindIndex(aList); + Maybe> index = FindIndex(aList); + if (!index) { + NS_WARNING("Family index not found! Ignoring SetupFamilyCharMap"); + return; + } if (NS_IsMainThread()) { dom::ContentChild::GetSingleton()->SendSetupFamilyCharMap( - aList->GetGeneration(), index.first, index.second); + aList->GetGeneration(), index->first, index->second); return; } NS_DispatchToMainThread(NS_NewRunnableFunction( "SetupFamilyCharMap callback", - [gen = aList->GetGeneration(), idx = index.first, - alias = index.second] { + [gen = aList->GetGeneration(), idx = index->first, + alias = index->second] { dom::ContentChild::GetSingleton()->SendSetupFamilyCharMap(gen, idx, alias); })); @@ -685,13 +696,13 @@ } } -std::pair Family::FindIndex(FontList* aList) const { +Maybe> Family::FindIndex(FontList* aList) const { const auto* start = aList->Families(); const auto* end = start + aList->NumFamilies(); if (this >= start && this < end) { uint32_t index = this - start; MOZ_RELEASE_ASSERT(start + index == this, "misaligned Family ptr!"); - return std::pair(index, false); + return Some(std::pair(index, false)); } start = aList->AliasFamilies(); @@ -699,10 +710,10 @@ if (this >= start && this < end) { uint32_t index = this - start; MOZ_RELEASE_ASSERT(start + index == this, "misaligned AliasFamily ptr!"); - return std::pair(index, true); + return Some(std::pair(index, true)); } - MOZ_CRASH("invalid font-list Family ptr!"); + return Nothing(); } FontList::FontList(uint32_t aGeneration) { diff -Nru thunderbird-115.8.0/gfx/thebes/SharedFontList.h thunderbird-115.9.0/gfx/thebes/SharedFontList.h --- thunderbird-115.8.0/gfx/thebes/SharedFontList.h 2024-02-16 23:38:27.000000000 +0000 +++ thunderbird-115.9.0/gfx/thebes/SharedFontList.h 2024-03-15 16:02:34.000000000 +0000 @@ -333,7 +333,8 @@ // Return the index of this family in the font-list's Families() or // AliasFamilies() list, and which of those it belongs to. - std::pair FindIndex(FontList* aList) const; + // Returns Nothing if the family cannot be found. + mozilla::Maybe> FindIndex(FontList* aList) const; private: // Returns true if there are specifically-sized bitmap faces in the list, diff -Nru thunderbird-115.8.0/gfx/thebes/gfxUserFontSet.cpp thunderbird-115.9.0/gfx/thebes/gfxUserFontSet.cpp --- thunderbird-115.8.0/gfx/thebes/gfxUserFontSet.cpp 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/gfx/thebes/gfxUserFontSet.cpp 2024-03-15 16:02:34.000000000 +0000 @@ -18,6 +18,7 @@ #include "mozilla/gfx/2D.h" #include "gfxPlatformFontList.h" #include "mozilla/PostTraversalTask.h" +#include "mozilla/dom/WorkerCommon.h" #include "gfxOTSUtils.h" #include "nsIFontLoadCompleteCallback.h" #include "nsProxyRelease.h" @@ -786,9 +787,17 @@ } void gfxUserFontEntry::Load() { - if (mUserFontLoadState == STATUS_NOT_LOADED) { - LoadNextSrc(); + if (mUserFontLoadState != STATUS_NOT_LOADED) { + return; + } + if (dom::IsCurrentThreadRunningWorker()) { + // TODO: Maybe support loading the font entry in workers, at least for + // buffers or other sync sources? + NS_DispatchToMainThread(NewRunnableMethod("gfxUserFontEntry::Load", this, + &gfxUserFontEntry::Load)); + return; } + LoadNextSrc(); } void gfxUserFontEntry::IncrementGeneration() { diff -Nru thunderbird-115.8.0/intl/tzdata/GIT-INFO thunderbird-115.9.0/intl/tzdata/GIT-INFO --- thunderbird-115.8.0/intl/tzdata/GIT-INFO 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/GIT-INFO 2024-03-15 16:02:35.000000000 +0000 @@ -1,5 +1,5 @@ -commit a4248d02cdf8329364d86e317e34422a894ae2f5 +commit 6f877dbcd7930f92fe8f97929e2ca683e7d443a2 Author: yumaoka -Date: Wed Mar 29 08:31:53 2023 -0400 +Date: Thu Feb 8 15:05:36 2024 -0500 - ICU-22339 Update tzdata to 2023c + ICU-22659 tzdata2024a updates in ICU Data repo diff -Nru thunderbird-115.8.0/intl/tzdata/VERSION thunderbird-115.9.0/intl/tzdata/VERSION --- thunderbird-115.8.0/intl/tzdata/VERSION 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/VERSION 2024-03-15 16:02:35.000000000 +0000 @@ -1 +1 @@ -2023c +2024a Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/be/metaZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/metaZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/be/timezoneTypes.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/timezoneTypes.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/be/windowsZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/windowsZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/be/zoneinfo64.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/be/zoneinfo64.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/ee/metaZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/metaZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/ee/timezoneTypes.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/timezoneTypes.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/ee/windowsZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/windowsZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/ee/zoneinfo64.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/ee/zoneinfo64.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/le/metaZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/metaZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/le/timezoneTypes.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/timezoneTypes.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/le/windowsZones.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/windowsZones.res differ Binary files /srv/release.debian.org/tmp/09tVTNU44Q/thunderbird-115.8.0/intl/tzdata/source/le/zoneinfo64.res and /srv/release.debian.org/tmp/TFnGEB2I5V/thunderbird-115.9.0/intl/tzdata/source/le/zoneinfo64.res differ diff -Nru thunderbird-115.8.0/intl/tzdata/source/metaZones.txt thunderbird-115.9.0/intl/tzdata/source/metaZones.txt --- thunderbird-115.8.0/intl/tzdata/source/metaZones.txt 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/source/metaZones.txt 2024-03-15 16:02:35.000000000 +0000 @@ -89,7 +89,6 @@ America_Mountain{ 001{"America/Denver"} CA{"America/Edmonton"} - MX{"America/Hermosillo"} } America_Pacific{ 001{"America/Los_Angeles"} @@ -361,6 +360,9 @@ Goose_Bay{ 001{"America/Goose_Bay"} } + Greenland{ + 001{"America/Godthab"} + } Greenland_Central{ 001{"America/Scoresbysund"} } @@ -473,9 +475,6 @@ Macau{ 001{"Asia/Macau"} } - Macquarie{ - 001{"Antarctica/Macquarie"} - } Magadan{ 001{"Asia/Magadan"} } @@ -500,9 +499,6 @@ Mawson{ 001{"Antarctica/Mawson"} } - Mexico_Northwest{ - 001{"America/Santa_Isabel"} - } Mexico_Pacific{ 001{"America/Mazatlan"} } @@ -773,6 +769,7 @@ geor{"Georgia"} giis{"Gilbert_Islands"} grea{"Greenland_Eastern"} + gree{"Greenland"} grwe{"Greenland_Western"} guam{"Guam"} gulf{"Gulf"} @@ -801,7 +798,6 @@ liis{"Line_Islands"} loho{"Lord_Howe"} maca{"Macau"} - macq{"Macquarie"} maga{"Magadan"} mais{"Marshall_Islands"} mala{"Malaysia"} @@ -809,7 +805,6 @@ marq{"Marquesas"} maur{"Mauritius"} maws{"Mawson"} - meno{"Mexico_Northwest"} mepa{"Mexico_Pacific"} mgmt{"GMT"} mong{"Mongolia"} @@ -1823,6 +1818,13 @@ "America:Godthab"{ { "Greenland_Western", + "1970-01-01 00:00", + "2024-03-26 01:00", + } + { + "Greenland", + "2024-03-26 01:00", + "9999-12-31 23:59", } } "America:Goose_Bay"{ @@ -2324,11 +2326,6 @@ "America_Eastern", } } - "America:Nipigon"{ - { - "America_Eastern", - } - } "America:Nome"{ { "Bering", @@ -2404,23 +2401,6 @@ "America_Eastern", } } - "America:Pangnirtung"{ - { - "America_Eastern", - "1970-01-01 00:00", - "1999-10-31 06:00", - } - { - "America_Central", - "1999-10-31 06:00", - "2000-10-29 07:00", - } - { - "America_Eastern", - "2000-10-29 07:00", - "9999-12-31 23:59", - } - } "America:Paramaribo"{ { "Dutch_Guiana", @@ -2465,11 +2445,6 @@ "2016-12-03 23:00", } } - "America:Rainy_River"{ - { - "America_Central", - } - } "America:Rankin_Inlet"{ { "America_Central", @@ -2541,11 +2516,6 @@ "9999-12-31 23:59", } } - "America:Santa_Isabel"{ - { - "Mexico_Northwest", - } - } "America:Santarem"{ { "Amazon", @@ -2599,6 +2569,11 @@ { "Greenland_Eastern", "1981-03-29 02:00", + "2024-03-31 01:00", + } + { + "Greenland", + "2024-03-31 01:00", "9999-12-31 23:59", } } @@ -2666,11 +2641,6 @@ "Atlantic", } } - "America:Thunder_Bay"{ - { - "America_Eastern", - } - } "America:Tijuana"{ { "America_Pacific", @@ -2715,11 +2685,6 @@ "9999-12-31 23:59", } } - "America:Yellowknife"{ - { - "America_Mountain", - } - } "Antarctica:Casey"{ { "Australia_Western", @@ -2779,6 +2744,31 @@ { "Casey", "2020-10-03 16:01", + "2021-03-13 13:00", + } + { + "Australia_Western", + "2021-03-13 13:00", + "2021-10-02 16:01", + } + { + "Casey", + "2021-10-02 16:01", + "2022-03-12 13:00", + } + { + "Australia_Western", + "2022-03-12 13:00", + "2022-10-01 16:01", + } + { + "Casey", + "2022-10-01 16:01", + "2023-03-08 16:00", + } + { + "Australia_Western", + "2023-03-08 16:00", "9999-12-31 23:59", } } @@ -2858,6 +2848,11 @@ { "Kazakhstan_Eastern", "2004-10-30 20:00", + "2024-02-29 18:00", + } + { + "Kazakhstan_Western", + "2024-02-29 18:00", "9999-12-31 23:59", } } @@ -3373,6 +3368,11 @@ { "Kazakhstan_Eastern", "2004-10-30 21:00", + "2024-02-29 18:00", + } + { + "Kazakhstan_Western", + "2024-02-29 18:00", "9999-12-31 23:59", } } @@ -3658,11 +3658,6 @@ "Australia_Central", } } - "Australia:Currie"{ - { - "Australia_Eastern", - } - } "Australia:Darwin"{ { "Australia_Central", @@ -4158,18 +4153,6 @@ "2016-03-26 23:00", } } - "Europe:Uzhgorod"{ - { - "Moscow", - "1970-01-01 00:00", - "1990-06-30 22:00", - } - { - "Europe_Eastern", - "1990-06-30 22:00", - "9999-12-31 23:59", - } - } "Europe:Vaduz"{ { "Europe_Central", @@ -4222,18 +4205,6 @@ "Europe_Central", } } - "Europe:Zaporozhye"{ - { - "Moscow", - "1970-01-01 00:00", - "1990-06-30 22:00", - } - { - "Europe_Eastern", - "1990-06-30 22:00", - "9999-12-31 23:59", - } - } "Europe:Zurich"{ { "Europe_Central", @@ -4394,18 +4365,6 @@ { "Alaska_Hawaii", "1970-01-01 00:00", - "1983-10-30 11:00", - } - { - "Hawaii_Aleutian", - "1983-10-30 11:00", - "9999-12-31 23:59", - } - } - "Pacific:Johnston"{ - { - "Alaska_Hawaii", - "1970-01-01 00:00", "1983-10-30 11:00", } { diff -Nru thunderbird-115.8.0/intl/tzdata/source/timezoneTypes.txt thunderbird-115.9.0/intl/tzdata/source/timezoneTypes.txt --- thunderbird-115.8.0/intl/tzdata/source/timezoneTypes.txt 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/source/timezoneTypes.txt 2024-03-15 16:02:35.000000000 +0000 @@ -5,13 +5,47 @@ bcpTypeAlias{ tz{ aqams{"nzakl"} + aukns{"auhba"} + caffs{"cawnp"} + camtr{"cator"} + canpg{"cator"} + capnt{"caiql"} + cathu{"cator"} + cayzf{"caedm"} cnckg{"cnsha"} cnhrb{"cnsha"} cnkhg{"cnurc"} gaza{"gazastrp"} + mxstis{"mxtij"} + uaozh{"uaiev"} + uauzh{"uaiev"} + umjon{"ushnl"} usnavajo{"usden"} } } + ianaMap{ + timezone{ + "Africa:Asmera"{"Africa/Asmara"} + "America:Buenos_Aires"{"America/Argentina/Buenos_Aires"} + "America:Catamarca"{"America/Argentina/Catamarca"} + "America:Coral_Harbour"{"America/Atikokan"} + "America:Cordoba"{"America/Argentina/Cordoba"} + "America:Godthab"{"America/Nuuk"} + "America:Indianapolis"{"America/Indiana/Indianapolis"} + "America:Jujuy"{"America/Argentina/Jujuy"} + "America:Louisville"{"America/Kentucky/Louisville"} + "America:Mendoza"{"America/Argentina/Mendoza"} + "Asia:Calcutta"{"Asia/Kolkata"} + "Asia:Katmandu"{"Asia/Kathmandu"} + "Asia:Rangoon"{"Asia/Yangon"} + "Asia:Saigon"{"Asia/Ho_Chi_Minh"} + "Atlantic:Faeroe"{"Atlantic/Faroe"} + "Europe:Kiev"{"Europe/Kyiv"} + "Pacific:Enderbury"{"Pacific/Kanton"} + "Pacific:Ponape"{"Pacific/Pohnpei"} + "Pacific:Truk"{"Pacific/Chuuk"} + } + } typeAlias{ timezone{ "Africa:Asmara"{"Africa/Asmera"} @@ -29,11 +63,18 @@ "America:Indiana:Indianapolis"{"America/Indianapolis"} "America:Kentucky:Louisville"{"America/Louisville"} "America:Knox_IN"{"America/Indiana/Knox"} + "America:Montreal"{"America/Toronto"} + "America:Nipigon"{"America/Toronto"} "America:Nuuk"{"America/Godthab"} + "America:Pangnirtung"{"America/Iqaluit"} "America:Porto_Acre"{"America/Rio_Branco"} + "America:Rainy_River"{"America/Winnipeg"} "America:Rosario"{"America/Cordoba"} + "America:Santa_Isabel"{"America/Tijuana"} "America:Shiprock"{"America/Denver"} + "America:Thunder_Bay"{"America/Toronto"} "America:Virgin"{"America/St_Thomas"} + "America:Yellowknife"{"America/Edmonton"} "Antarctica:South_Pole"{"Pacific/Auckland"} "Asia:Ashkhabad"{"Asia/Ashgabat"} "Asia:Chongqing"{"Asia/Shanghai"} @@ -55,6 +96,7 @@ "Atlantic:Jan_Mayen"{"Arctic/Longyearbyen"} "Australia:ACT"{"Australia/Sydney"} "Australia:Canberra"{"Australia/Sydney"} + "Australia:Currie"{"Australia/Hobart"} "Australia:LHI"{"Australia/Lord_Howe"} "Australia:NSW"{"Australia/Sydney"} "Australia:North"{"Australia/Darwin"} @@ -90,10 +132,13 @@ "Europe:Kyiv"{"Europe/Kiev"} "Europe:Nicosia"{"Asia/Nicosia"} "Europe:Tiraspol"{"Europe/Chisinau"} + "Europe:Uzhgorod"{"Europe/Kiev"} + "Europe:Zaporozhye"{"Europe/Kiev"} "Mexico:BajaNorte"{"America/Tijuana"} "Mexico:BajaSur"{"America/Mazatlan"} "Mexico:General"{"America/Mexico_City"} "Pacific:Chuuk"{"Pacific/Truk"} + "Pacific:Johnston"{"Pacific/Honolulu"} "Pacific:Kanton"{"Pacific/Enderbury"} "Pacific:Pohnpei"{"Pacific/Ponape"} "Pacific:Samoa"{"Pacific/Pago_Pago"} @@ -302,11 +347,9 @@ "America:Moncton"{"camon"} "America:Monterrey"{"mxmty"} "America:Montevideo"{"uymvd"} - "America:Montreal"{"camtr"} "America:Montserrat"{"msmni"} "America:Nassau"{"bsnas"} "America:New_York"{"usnyc"} - "America:Nipigon"{"canpg"} "America:Nome"{"usome"} "America:Noronha"{"brfen"} "America:North_Dakota:Beulah"{"usxul"} @@ -314,7 +357,6 @@ "America:North_Dakota:New_Salem"{"usndnsl"} "America:Ojinaga"{"mxoji"} "America:Panama"{"papty"} - "America:Pangnirtung"{"capnt"} "America:Paramaribo"{"srpbm"} "America:Phoenix"{"usphx"} "America:Port-au-Prince"{"htpap"} @@ -322,13 +364,11 @@ "America:Porto_Velho"{"brpvh"} "America:Puerto_Rico"{"prsju"} "America:Punta_Arenas"{"clpuq"} - "America:Rainy_River"{"caffs"} "America:Rankin_Inlet"{"cayek"} "America:Recife"{"brrec"} "America:Regina"{"careg"} "America:Resolute"{"careb"} "America:Rio_Branco"{"brrbr"} - "America:Santa_Isabel"{"mxstis"} "America:Santarem"{"brstm"} "America:Santiago"{"clscl"} "America:Santo_Domingo"{"dosdq"} @@ -344,7 +384,6 @@ "America:Swift_Current"{"cayyn"} "America:Tegucigalpa"{"hntgu"} "America:Thule"{"glthu"} - "America:Thunder_Bay"{"cathu"} "America:Tijuana"{"mxtij"} "America:Toronto"{"cator"} "America:Tortola"{"vgtov"} @@ -352,7 +391,6 @@ "America:Whitehorse"{"cayxy"} "America:Winnipeg"{"cawnp"} "America:Yakutat"{"usyak"} - "America:Yellowknife"{"cayzf"} "Antarctica:Casey"{"aqcas"} "Antarctica:Davis"{"aqdav"} "Antarctica:DumontDUrville"{"aqddu"} @@ -461,7 +499,6 @@ "Australia:Adelaide"{"auadl"} "Australia:Brisbane"{"aubne"} "Australia:Broken_Hill"{"aubhq"} - "Australia:Currie"{"aukns"} "Australia:Darwin"{"audrw"} "Australia:Eucla"{"aueuc"} "Australia:Hobart"{"auhba"} @@ -549,7 +586,6 @@ "Europe:Tallinn"{"eetll"} "Europe:Tirane"{"altia"} "Europe:Ulyanovsk"{"ruuly"} - "Europe:Uzhgorod"{"uauzh"} "Europe:Vaduz"{"livdz"} "Europe:Vatican"{"vavat"} "Europe:Vienna"{"atvie"} @@ -557,7 +593,6 @@ "Europe:Volgograd"{"ruvog"} "Europe:Warsaw"{"plwaw"} "Europe:Zagreb"{"hrzag"} - "Europe:Zaporozhye"{"uaozh"} "Europe:Zurich"{"chzrh"} "Indian:Antananarivo"{"mgtnr"} "Indian:Chagos"{"iodga"} @@ -585,7 +620,6 @@ "Pacific:Guadalcanal"{"sbhir"} "Pacific:Guam"{"gugum"} "Pacific:Honolulu"{"ushnl"} - "Pacific:Johnston"{"umjon"} "Pacific:Kiritimati"{"kicxi"} "Pacific:Kosrae"{"fmksa"} "Pacific:Kwajalein"{"mhkwa"} diff -Nru thunderbird-115.8.0/intl/tzdata/source/windowsZones.txt thunderbird-115.9.0/intl/tzdata/source/windowsZones.txt --- thunderbird-115.8.0/intl/tzdata/source/windowsZones.txt 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/source/windowsZones.txt 2024-03-15 16:02:35.000000000 +0000 @@ -126,12 +126,11 @@ ZZ{"Etc/GMT+6"} } "Central Asia Standard Time"{ - 001{"Asia/Almaty"} + 001{"Asia/Bishkek"} AQ{"Antarctica/Vostok"} CN{"Asia/Urumqi"} IO{"Indian/Chagos"} KG{"Asia/Bishkek"} - KZ{"Asia/Almaty Asia/Qostanay"} ZZ{"Etc/GMT-6"} } "Central Brazilian Standard Time"{ @@ -173,10 +172,7 @@ } "Central Standard Time"{ 001{"America/Chicago"} - CA{ - "America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Re" - "solute" - } + CA{"America/Winnipeg America/Rankin_Inlet America/Resolute"} MX{"America/Matamoros America/Ojinaga"} US{ "America/Chicago America/Indiana/Knox America/Indiana/Tell_City Ameri" @@ -241,10 +237,7 @@ "Eastern Standard Time"{ 001{"America/New_York"} BS{"America/Nassau"} - CA{ - "America/Toronto America/Iqaluit America/Montreal America/Nipigon Ame" - "rica/Pangnirtung America/Thunder_Bay" - } + CA{"America/Toronto America/Iqaluit"} US{ "America/New_York America/Detroit America/Indiana/Petersburg America/" "Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticell" @@ -268,7 +261,7 @@ FI{"Europe/Helsinki"} LT{"Europe/Vilnius"} LV{"Europe/Riga"} - UA{"Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye"} + UA{"Europe/Kiev"} } "Fiji Standard Time"{ 001{"Pacific/Fiji"} @@ -325,7 +318,6 @@ 001{"Pacific/Honolulu"} CK{"Pacific/Rarotonga"} PF{"Pacific/Tahiti"} - UM{"Pacific/Johnston"} US{"Pacific/Honolulu"} ZZ{"Etc/GMT+10"} } @@ -403,10 +395,7 @@ } "Mountain Standard Time"{ 001{"America/Denver"} - CA{ - "America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellow" - "knife" - } + CA{"America/Edmonton America/Cambridge_Bay America/Inuvik"} MX{"America/Ciudad_Juarez"} US{"America/Denver America/Boise"} ZZ{"MST7MDT"} @@ -463,7 +452,7 @@ } "Pacific Standard Time (Mexico)"{ 001{"America/Tijuana"} - MX{"America/Tijuana America/Santa_Isabel"} + MX{"America/Tijuana"} } "Pacific Standard Time"{ 001{"America/Los_Angeles"} @@ -638,7 +627,7 @@ } "Tasmania Standard Time"{ 001{"Australia/Hobart"} - AU{"Australia/Hobart Australia/Currie Antarctica/Macquarie"} + AU{"Australia/Hobart Antarctica/Macquarie"} } "Tocantins Standard Time"{ 001{"America/Araguaina"} @@ -789,7 +778,10 @@ "West Asia Standard Time"{ 001{"Asia/Tashkent"} AQ{"Antarctica/Mawson"} - KZ{"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau"} + KZ{ + "Asia/Oral Asia/Almaty Asia/Aqtau Asia/Aqtobe Asia/Atyrau Asia/Qostan" + "ay" + } MV{"Indian/Maldives"} TF{"Indian/Kerguelen"} TJ{"Asia/Dushanbe"} diff -Nru thunderbird-115.8.0/intl/tzdata/source/zoneinfo64.txt thunderbird-115.9.0/intl/tzdata/source/zoneinfo64.txt --- thunderbird-115.8.0/intl/tzdata/source/zoneinfo64.txt 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/intl/tzdata/source/zoneinfo64.txt 2024-03-15 16:02:35.000000000 +0000 @@ -3,17 +3,17 @@ // License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------- // Build tool: tz2icu -// Build date: Tue Mar 28 17:28:32 2023 +// Build date: Wed Feb 7 16:30:19 2024 // tz database: ftp://ftp.iana.org/tz/ -// tz version: 2023c -// ICU version: 73.1 +// tz version: 2024a +// ICU version: 75.0.1 //--------------------------------------------------------- // >> !!! >> THIS IS A MACHINE-GENERATED FILE << !!! << // >> !!! >>> DO NOT EDIT <<< !!! << //--------------------------------------------------------- zoneinfo64:table(nofallback) { - TZVersion { "2023c" } + TZVersion { "2024a" } Zones:array { /* ACT */ :int { 357 } //Z#0 /* AET */ :int { 369 } //Z#1 @@ -759,7 +759,7 @@ links:intvector { 166, 542 } } //Z#166 /* America/Miquelon */ :table { - trans:intvector { -1850328920, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 } + trans:intvector { -1847650520, 326001600, 544597200, 562132800, 576046800, 594187200, 607496400, 625636800, 638946000, 657086400, 671000400, 688536000, 702450000, 719985600, 733899600, 752040000, 765349200, 783489600, 796798800, 814939200, 828853200, 846388800, 860302800, 877838400, 891752400, 909288000, 923202000, 941342400, 954651600, 972792000, 986101200, 1004241600, 1018155600, 1035691200, 1049605200, 1067140800, 1081054800, 1099195200, 1112504400, 1130644800, 1143954000, 1162094400, 1173589200, 1194148800 } typeOffsets:intvector { -13480, 0, -14400, 0, -10800, 0, -10800, 3600 } typeMap:bin { "0102030203020302030203020302030203020302030203020302030203020302030203020302030203020302" } finalRule { "Canada" } @@ -842,9 +842,9 @@ finalYear:int { 2008 } } //Z#180 /* America/Nuuk */ :table { - trans:intvector { -1686083584, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1477789200, 1490490000, 1509238800, 1521939600, 1540688400, 1553994000, 1572138000, 1585443600, 1603587600, 1616893200, 1635642000, 1648342800, 1667091600, 1679792400, 1698541200, 1711846800, 1729990800 } + trans:intvector { -1686083584, 323845200, 338950800, 354675600, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1477789200, 1490490000, 1509238800, 1521939600, 1540688400, 1553994000, 1572138000, 1585443600, 1603587600, 1616893200, 1635642000, 1648342800, 1667091600, 1679792400, 1711846800, 1729990800 } typeOffsets:intvector { -12416, 0, -10800, 0, -10800, 3600, -7200, 0, -7200, 3600 } - typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102030403" } + typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201030403" } finalRule { "EU" } finalRaw:int { -7200 } finalYear:int { 2025 } @@ -970,12 +970,12 @@ links:intvector { 204, 374, 378 } } //Z#204 /* America/Scoresbysund */ :table { - trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000 } + trans:intvector { -1686090728, 323841600, 338961600, 354679200, 370400400, 386125200, 401850000, 417574800, 433299600, 449024400, 465354000, 481078800, 496803600, 512528400, 528253200, 543978000, 559702800, 575427600, 591152400, 606877200, 622602000, 638326800, 654656400, 670381200, 686106000, 701830800, 717555600, 733280400, 749005200, 764730000, 780454800, 796179600, 811904400, 828234000, 846378000, 859683600, 877827600, 891133200, 909277200, 922582800, 941331600, 954032400, 972781200, 985482000, 1004230800, 1017536400, 1035680400, 1048986000, 1067130000, 1080435600, 1099184400, 1111885200, 1130634000, 1143334800, 1162083600, 1174784400, 1193533200, 1206838800, 1224982800, 1238288400, 1256432400, 1269738000, 1288486800, 1301187600, 1319936400, 1332637200, 1351386000, 1364691600, 1382835600, 1396141200, 1414285200, 1427590800, 1445734800, 1459040400, 1477789200, 1490490000, 1509238800, 1521939600, 1540688400, 1553994000, 1572138000, 1585443600, 1603587600, 1616893200, 1635642000, 1648342800, 1667091600, 1679792400, 1698541200, 1711846800, 1729990800 } typeOffsets:intvector { -5272, 0, -7200, 0, -7200, 3600, -3600, 0, -3600, 3600 } - typeMap:bin { "0102010403040304030403040304030403040304030403040304030403040304030403" } + typeMap:bin { "01020104030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030403040304030201" } finalRule { "EU" } - finalRaw:int { -3600 } - finalYear:int { 1997 } + finalRaw:int { -7200 } + finalYear:int { 2025 } } //Z#205 /* America/Shiprock */ :int { 110 } //Z#206 /* America/Sitka */ :table { @@ -1031,7 +1031,7 @@ } //Z#218 /* America/Toronto */ :table { transPre32:intvector { -1, 1928231148 } - trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715806000, -702504000, -684356400, -671054400, -652906800, -634161600, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } + trans:intvector { -1632070800, -1615140000, -1601753400, -1583697600, -1567357200, -1554667200, -1534698000, -1524074400, -1503248400, -1492365600, -1471798800, -1460916000, -1440954000, -1428861600, -1409504400, -1397412000, -1378054800, -1365962400, -1346605200, -1333908000, -1315155600, -1301853600, -1283706000, -1270404000, -1252256400, -1238954400, -1220806800, -1207504800, -1188752400, -1176055200, -1157302800, -1144000800, -1125853200, -1112551200, -1094403600, -1081101600, -1062954000, -1049652000, -1031504400, -1018202400, -1000054800, -986752800, -968000400, -955303200, -936550800, -765396000, -747248400, -733946400, -715798800, -702496800, -684349200, -671047200, -652899600, -634154400, -620845200, -602704800, -589395600, -576093600, -557946000, -544644000, -526496400, -513194400, -495046800, -481744800, -463597200, -450295200, -431542800, -418240800, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 136364400, 152085600, 167814000, 183535200, 199263600, 215589600, 230713200, 247039200, 262767600, 278488800, 294217200, 309938400, 325666800, 341388000, 357116400, 372837600, 388566000, 404892000, 420015600, 436341600, 452070000, 467791200, 483519600, 499240800, 514969200, 530690400, 544604400, 562140000, 576054000, 594194400, 607503600, 625644000, 638953200, 657093600, 671007600, 688543200, 702457200, 719992800, 733906800, 752047200, 765356400, 783496800, 796806000, 814946400, 828860400, 846396000, 860310000, 877845600, 891759600, 909295200, 923209200, 941349600, 954658800, 972799200, 986108400, 1004248800, 1018162800, 1035698400, 1049612400, 1067148000, 1081062000, 1099202400, 1112511600, 1130652000, 1143961200, 1162101600, 1173596400, 1194156000 } typeOffsets:intvector { -19052, 0, -18000, 0, -18000, 3600 } typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } finalRule { "Canada" } @@ -1079,9 +1079,9 @@ } //Z#225 /* America/Yellowknife */ :int { 113 } //Z#226 /* Antarctica/Casey */ :table { - trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600, 1520701200, 1538856000, 1552752000, 1570129200, 1583596800, 1601740860 } + trans:intvector { -31536000, 1255802400, 1267714800, 1319738400, 1329843600, 1477065600, 1520701200, 1538856000, 1552752000, 1570129200, 1583596800, 1601740860, 1615640400, 1633190460, 1647090000, 1664640060, 1678291200 } typeOffsets:intvector { 0, 0, 28800, 0, 39600, 0 } - typeMap:bin { "010201020102010201020102" } + typeMap:bin { "0102010201020102010201020102010201" } } //Z#227 /* Antarctica/Davis */ :table { trans:intvector { -409190400, -163062000, -28857600, 1255806000, 1268251200, 1319742000, 1329854400 } @@ -1124,13 +1124,17 @@ finalRaw:int { 0 } finalYear:int { 2006 } } //Z#237 - /* Antarctica/Vostok */ :int { 331 } //Z#238 + /* Antarctica/Vostok */ :table { + trans:intvector { -380073600, 760035600, 783648000, 1702839600 } + typeOffsets:intvector { 0, 0, 18000, 0, 25200, 0 } + typeMap:bin { "02000201" } + } //Z#238 /* Arctic/Longyearbyen */ :int { 447 } //Z#239 /* Asia/Aden */ :int { 311 } //Z#240 /* Asia/Almaty */ :table { - trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400 } + trans:intvector { -1441170468, -1247547600, 354909600, 370717200, 386445600, 402253200, 417981600, 433789200, 449604000, 465336000, 481060800, 496785600, 512510400, 528235200, 543960000, 559684800, 575409600, 591134400, 606859200, 622584000, 638308800, 654638400, 670363200, 686091600, 695768400, 701812800, 717537600, 733262400, 748987200, 764712000, 780436800, 796161600, 811886400, 828216000, 846360000, 859665600, 877809600, 891115200, 909259200, 922564800, 941313600, 954014400, 972763200, 985464000, 1004212800, 1017518400, 1035662400, 1048968000, 1067112000, 1080417600, 1099166400, 1709229600 } typeOffsets:intvector { 18468, 0, 18000, 0, 18000, 3600, 21600, 0, 21600, 3600 } - typeMap:bin { "010304030403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030403" } + typeMap:bin { "01030403040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040301" } } //Z#241 /* Asia/Amman */ :table { trans:intvector { -1230776624, 108165600, 118270800, 136591200, 149806800, 168127200, 181342800, 199749600, 215643600, 231285600, 244501200, 262735200, 275950800, 481154400, 496962000, 512949600, 528670800, 544399200, 560120400, 575848800, 592174800, 610581600, 623624400, 641167200, 655074000, 671839200, 685918800, 702856800, 717973200, 733701600, 749422800, 765151200, 779662800, 797205600, 811116000, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 930780000, 938124000, 954367200, 970178400, 985816800, 1001628000, 1017352800, 1033077600, 1048802400, 1066946400, 1080252000, 1097791200, 1112306400, 1128031200, 1143756000, 1161900000, 1175205600, 1193349600, 1206655200, 1225404000, 1238104800, 1256853600, 1269554400, 1288303200, 1301608800, 1319752800, 1333058400, 1387486800, 1395957600, 1414706400, 1427407200, 1446156000, 1459461600, 1477605600, 1490911200, 1509055200, 1522360800, 1540504800, 1553810400, 1571954400, 1585260000, 1604008800, 1616709600, 1635458400, 1645740000, 1666908000 } @@ -1260,10 +1264,10 @@ } //Z#269 /* Asia/Gaza */ :table { transPre32:intvector { -1, 2109557424 } - trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666998000, 1682726400, 1698447600, 1712966400, 1729897200, 1743811200, 1761346800, 1774656000, 1792796400, 1806105600, 1824850800, 1837555200, 1856300400, 1869004800, 1887750000, 1901059200, 1919199600, 1932508800, 1950649200, 1963958400, 1982703600, 1995408000, 2014153200, 2026857600, 2045602800, 2058307200, 2077052400, 2090361600, 2107897200, 2121811200, 2138742000 } - transPost32:intvector { 0, -2141706496, 0, -2125985296, 0, -2110256896, 0, -2095140496, 0, -2092112896, 0, -2091511696, 0, -2078807296, 0, -2064900496, 0, -2061268096, 0, -2060062096, 0, -2046752896, 0, -2034055696, 0, -2031028096, 0, -2028612496, 0, -2015303296, 0, -2003210896, 0, -2000183296, 0, -1997162896, 0, -1983853696, 0, -1972970896, 0, -1969338496, 0, -1965713296, 0, -1952404096, 0, -1942126096, 0, -1939098496, 0, -1933658896, 0, -1920954496, 0, -1911281296, 0, -1908253696, 0, -1902209296, 0, -1889504896, 0, -1881041296, 0, -1877408896, 0, -1870759696, 0, -1857450496, 0, -1850196496, 0, -1847168896, 0, -1839310096, 0, -1826000896, 0, -1819956496, 0, -1816324096, 0, -1807860496, 0, -1794551296, 0, -1789111696, 0, -1786084096, 0, -1775806096, 0, -1763101696, 0, -1758266896, 0, -1755239296, 0, -1744356496, 0, -1731652096, 0, -1728026896, 0, -1724394496, 0, -1712906896, 0, -1699597696, 0, -1697182096, 0, -1694154496, 0, -1681457296, 0, -1668148096, 0, -1666942096, 0, -1663309696, 0, -1650007696, 0, -1636698496, 0, -1636097296, 0, -1632464896, 0, -1618558096, 0, -1602224896, 0, -1586503696, 0, -1571380096, 0, -1555054096, 0, -1541140096, 0, -1523604496, 0, -1510295296, 0, -1492154896, 0, -1478845696, 0, -1460705296, 0, -1447396096, 0, -1428650896, 0, -1415946496, 0, -1397201296, 0, -1384496896, 0, -1365751696, 0, -1353047296, 0, -1334302096, 0, -1320992896, 0, -1302852496, 0, -1289543296, 0, -1271402896, 0, -1258093696, 0, -1239348496, 0, -1226644096, 0, -1207898896, 0, -1195194496, 0, -1177054096, 0, -1163140096, 0, -1146209296, 0, -1131690496, 0, -1115364496, 0, -1100240896, 0, -1085124496, 0, -1068791296, 0, -1054279696, 0, -1051252096, 0, -1023434896, 0, -1020407296, 0, -993194896, 0, -989562496, 0, -962350096, 0, -959322496, 0, -955697296, 0, -942388096, 0, -932110096, 0, -928477696, 0, -924247696, 0, -910938496, 0, -901265296, 0, -897632896, 0, -892193296, 0, -879488896, 0, -870420496, 0, -867392896, 0, -860743696, 0, -848039296, 0, -840180496, 0, -836548096, 0, -829294096, 0, -815984896, 0, -809335696, 0, -806308096, 0, -797844496, 0, -784535296, 0, -778490896, 0, -775463296, 0, -766394896, 0, -753085696, 0, -748250896, 0, -744618496, 0, -734945296, 0, -721636096, 0, -717406096, 0, -714378496, 0, -702890896, 0, -690186496, 0, -687166096, 0, -683533696, 0, -671441296, 0, -658736896, 0, -656321296, 0, -652688896, 0, -639991696, 0, -626682496, 0, -625476496, 0, -622448896, 0, -608542096, 0, -595232896, 0, -577092496 } + trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1219957200, 1238104800, 1252015200, 1269640860, 1281474000, 1301608860, 1312146000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666998000, 1682726400, 1698447600, 1713571200, 1729897200, 1744416000, 1761346800, 1774656000, 1792796400, 1806105600, 1824850800, 1837555200, 1856300400, 1869004800, 1887750000, 1901059200, 1919199600, 1932508800, 1950649200, 1963958400, 1982703600, 1995408000, 2014153200, 2026857600, 2045602800, 2058307200, 2077052400, 2090361600, 2107897200, 2121811200, 2138742000 } + transPost32:intvector { 0, -2141706496, 0, -2125985296, 0, -2110256896, 0, -2095140496, 0, -2078807296, 0, -2064900496, 0, -2060663296, 0, -2060062096, 0, -2046752896, 0, -2034055696, 0, -2030423296, 0, -2028612496, 0, -2015303296, 0, -2003210896, 0, -1999578496, 0, -1997162896, 0, -1983853696, 0, -1972970896, 0, -1968733696, 0, -1965713296, 0, -1952404096, 0, -1942126096, 0, -1938493696, 0, -1933658896, 0, -1920954496, 0, -1911281296, 0, -1907648896, 0, -1902209296, 0, -1889504896, 0, -1881041296, 0, -1876804096, 0, -1870759696, 0, -1857450496, 0, -1850196496, 0, -1846564096, 0, -1839310096, 0, -1826000896, 0, -1819956496, 0, -1815719296, 0, -1807860496, 0, -1794551296, 0, -1789111696, 0, -1785479296, 0, -1775806096, 0, -1763101696, 0, -1758266896, 0, -1754634496, 0, -1744356496, 0, -1731652096, 0, -1728026896, 0, -1723789696, 0, -1712906896, 0, -1699597696, 0, -1697182096, 0, -1693549696, 0, -1681457296, 0, -1668148096, 0, -1666942096, 0, -1662704896, 0, -1650007696, 0, -1636698496, 0, -1636097296, 0, -1631860096, 0, -1618558096, 0, -1601620096, 0, -1586503696, 0, -1570775296, 0, -1555054096, 0, -1540535296, 0, -1523604496, 0, -1509690496, 0, -1492154896, 0, -1478845696, 0, -1460705296, 0, -1447396096, 0, -1428650896, 0, -1415946496, 0, -1397201296, 0, -1384496896, 0, -1365751696, 0, -1353047296, 0, -1334302096, 0, -1320992896, 0, -1302852496, 0, -1289543296, 0, -1271402896, 0, -1258093696, 0, -1239348496, 0, -1226644096, 0, -1207898896, 0, -1195194496, 0, -1177054096, 0, -1163140096, 0, -1146209296, 0, -1131690496, 0, -1115364496, 0, -1100240896, 0, -1085124496, 0, -1068791296, 0, -1054279696, 0, -1050647296, 0, -1050046096, 0, -1037341696, 0, -1023434896, 0, -1019802496, 0, -1018596496, 0, -1005892096, 0, -993194896, 0, -988957696, 0, -987146896, 0, -973837696, 0, -962350096, 0, -958717696, 0, -955697296, 0, -942388096, 0, -932110096, 0, -927872896, 0, -924247696, 0, -910938496, 0, -901265296, 0, -897028096, 0, -892193296, 0, -879488896, 0, -870420496, 0, -866788096, 0, -860743696, 0, -848039296, 0, -840180496, 0, -835943296, 0, -829294096, 0, -815984896, 0, -809335696, 0, -805703296, 0, -797844496, 0, -784535296, 0, -778490896, 0, -774858496, 0, -766394896, 0, -753085696, 0, -748250896, 0, -744013696, 0, -734945296, 0, -721636096, 0, -717406096, 0, -713773696, 0, -702890896, 0, -690186496, 0, -687166096, 0, -682928896, 0, -671441296, 0, -658736896, 0, -656321296, 0, -652084096, 0, -639991696, 0, -626682496, 0, -625476496, 0, -621844096, 0, -608542096, 0, -595232896, 0, -577092496 } typeOffsets:intvector { 8272, 0, 7200, 0, 7200, 3600 } - typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + typeMap:bin { "010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2088 } @@ -1271,16 +1275,16 @@ /* Asia/Harbin */ :int { 316 } //Z#271 /* Asia/Hebron */ :table { transPre32:intvector { -1, 2109557273 } - trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666998000, 1682726400, 1698447600, 1712966400, 1729897200, 1743811200, 1761346800, 1774656000, 1792796400, 1806105600, 1824850800, 1837555200, 1856300400, 1869004800, 1887750000, 1901059200, 1919199600, 1932508800, 1950649200, 1963958400, 1982703600, 1995408000, 2014153200, 2026857600, 2045602800, 2058307200, 2077052400, 2090361600, 2107897200, 2121811200, 2138742000 } - transPost32:intvector { 0, -2141706496, 0, -2125985296, 0, -2110256896, 0, -2095140496, 0, -2092112896, 0, -2091511696, 0, -2078807296, 0, -2064900496, 0, -2061268096, 0, -2060062096, 0, -2046752896, 0, -2034055696, 0, -2031028096, 0, -2028612496, 0, -2015303296, 0, -2003210896, 0, -2000183296, 0, -1997162896, 0, -1983853696, 0, -1972970896, 0, -1969338496, 0, -1965713296, 0, -1952404096, 0, -1942126096, 0, -1939098496, 0, -1933658896, 0, -1920954496, 0, -1911281296, 0, -1908253696, 0, -1902209296, 0, -1889504896, 0, -1881041296, 0, -1877408896, 0, -1870759696, 0, -1857450496, 0, -1850196496, 0, -1847168896, 0, -1839310096, 0, -1826000896, 0, -1819956496, 0, -1816324096, 0, -1807860496, 0, -1794551296, 0, -1789111696, 0, -1786084096, 0, -1775806096, 0, -1763101696, 0, -1758266896, 0, -1755239296, 0, -1744356496, 0, -1731652096, 0, -1728026896, 0, -1724394496, 0, -1712906896, 0, -1699597696, 0, -1697182096, 0, -1694154496, 0, -1681457296, 0, -1668148096, 0, -1666942096, 0, -1663309696, 0, -1650007696, 0, -1636698496, 0, -1636097296, 0, -1632464896, 0, -1618558096, 0, -1602224896, 0, -1586503696, 0, -1571380096, 0, -1555054096, 0, -1541140096, 0, -1523604496, 0, -1510295296, 0, -1492154896, 0, -1478845696, 0, -1460705296, 0, -1447396096, 0, -1428650896, 0, -1415946496, 0, -1397201296, 0, -1384496896, 0, -1365751696, 0, -1353047296, 0, -1334302096, 0, -1320992896, 0, -1302852496, 0, -1289543296, 0, -1271402896, 0, -1258093696, 0, -1239348496, 0, -1226644096, 0, -1207898896, 0, -1195194496, 0, -1177054096, 0, -1163140096, 0, -1146209296, 0, -1131690496, 0, -1115364496, 0, -1100240896, 0, -1085124496, 0, -1068791296, 0, -1054279696, 0, -1051252096, 0, -1023434896, 0, -1020407296, 0, -993194896, 0, -989562496, 0, -962350096, 0, -959322496, 0, -955697296, 0, -942388096, 0, -932110096, 0, -928477696, 0, -924247696, 0, -910938496, 0, -901265296, 0, -897632896, 0, -892193296, 0, -879488896, 0, -870420496, 0, -867392896, 0, -860743696, 0, -848039296, 0, -840180496, 0, -836548096, 0, -829294096, 0, -815984896, 0, -809335696, 0, -806308096, 0, -797844496, 0, -784535296, 0, -778490896, 0, -775463296, 0, -766394896, 0, -753085696, 0, -748250896, 0, -744618496, 0, -734945296, 0, -721636096, 0, -717406096, 0, -714378496, 0, -702890896, 0, -690186496, 0, -687166096, 0, -683533696, 0, -671441296, 0, -658736896, 0, -656321296, 0, -652688896, 0, -639991696, 0, -626682496, 0, -625476496, 0, -622448896, 0, -608542096, 0, -595232896, 0, -577092496 } + trans:intvector { -933638400, -923097600, -919036800, -857347200, -844300800, -825811200, -812678400, -794188800, -779846400, -762652800, -748310400, -731116800, -399088800, -386650800, -368330400, -355114800, -336790800, -323654400, -305168400, -292032000, -273632400, -260496000, -242096400, -228960000, -210560400, -197424000, -178938000, -165801600, -147402000, -134265600, -115866000, -102643200, -84330000, -81313200, 142380000, 150843600, 167176800, 178664400, 334101600, 337730400, 452642400, 462319200, 482277600, 494370000, 516751200, 526424400, 545436000, 558478800, 576626400, 589323600, 609890400, 620773200, 638316000, 651618000, 669765600, 683672400, 701820000, 715726800, 733701600, 747176400, 765151200, 778021200, 796600800, 810075600, 828655200, 843170400, 860104800, 874620000, 891554400, 906069600, 924213600, 939934800, 956268000, 971989200, 987717600, 1003438800, 1019167200, 1034888400, 1050616800, 1066338000, 1082066400, 1096581600, 1113516000, 1128380400, 1143842400, 1158872400, 1175378400, 1189638000, 1206655200, 1220216400, 1238104800, 1252015200, 1269554400, 1281474000, 1301608860, 1312146000, 1314655200, 1317330000, 1333058400, 1348178400, 1364508000, 1380229200, 1395957600, 1414098000, 1427493600, 1445551200, 1458946800, 1477692000, 1490396400, 1509141600, 1521846000, 1540591200, 1553810400, 1572037200, 1585346400, 1603490400, 1616796000, 1635458400, 1648332000, 1666998000, 1682726400, 1698447600, 1713571200, 1729897200, 1744416000, 1761346800, 1774656000, 1792796400, 1806105600, 1824850800, 1837555200, 1856300400, 1869004800, 1887750000, 1901059200, 1919199600, 1932508800, 1950649200, 1963958400, 1982703600, 1995408000, 2014153200, 2026857600, 2045602800, 2058307200, 2077052400, 2090361600, 2107897200, 2121811200, 2138742000 } + transPost32:intvector { 0, -2141706496, 0, -2125985296, 0, -2110256896, 0, -2095140496, 0, -2078807296, 0, -2064900496, 0, -2060663296, 0, -2060062096, 0, -2046752896, 0, -2034055696, 0, -2030423296, 0, -2028612496, 0, -2015303296, 0, -2003210896, 0, -1999578496, 0, -1997162896, 0, -1983853696, 0, -1972970896, 0, -1968733696, 0, -1965713296, 0, -1952404096, 0, -1942126096, 0, -1938493696, 0, -1933658896, 0, -1920954496, 0, -1911281296, 0, -1907648896, 0, -1902209296, 0, -1889504896, 0, -1881041296, 0, -1876804096, 0, -1870759696, 0, -1857450496, 0, -1850196496, 0, -1846564096, 0, -1839310096, 0, -1826000896, 0, -1819956496, 0, -1815719296, 0, -1807860496, 0, -1794551296, 0, -1789111696, 0, -1785479296, 0, -1775806096, 0, -1763101696, 0, -1758266896, 0, -1754634496, 0, -1744356496, 0, -1731652096, 0, -1728026896, 0, -1723789696, 0, -1712906896, 0, -1699597696, 0, -1697182096, 0, -1693549696, 0, -1681457296, 0, -1668148096, 0, -1666942096, 0, -1662704896, 0, -1650007696, 0, -1636698496, 0, -1636097296, 0, -1631860096, 0, -1618558096, 0, -1601620096, 0, -1586503696, 0, -1570775296, 0, -1555054096, 0, -1540535296, 0, -1523604496, 0, -1509690496, 0, -1492154896, 0, -1478845696, 0, -1460705296, 0, -1447396096, 0, -1428650896, 0, -1415946496, 0, -1397201296, 0, -1384496896, 0, -1365751696, 0, -1353047296, 0, -1334302096, 0, -1320992896, 0, -1302852496, 0, -1289543296, 0, -1271402896, 0, -1258093696, 0, -1239348496, 0, -1226644096, 0, -1207898896, 0, -1195194496, 0, -1177054096, 0, -1163140096, 0, -1146209296, 0, -1131690496, 0, -1115364496, 0, -1100240896, 0, -1085124496, 0, -1068791296, 0, -1054279696, 0, -1050647296, 0, -1050046096, 0, -1037341696, 0, -1023434896, 0, -1019802496, 0, -1018596496, 0, -1005892096, 0, -993194896, 0, -988957696, 0, -987146896, 0, -973837696, 0, -962350096, 0, -958717696, 0, -955697296, 0, -942388096, 0, -932110096, 0, -927872896, 0, -924247696, 0, -910938496, 0, -901265296, 0, -897028096, 0, -892193296, 0, -879488896, 0, -870420496, 0, -866788096, 0, -860743696, 0, -848039296, 0, -840180496, 0, -835943296, 0, -829294096, 0, -815984896, 0, -809335696, 0, -805703296, 0, -797844496, 0, -784535296, 0, -778490896, 0, -774858496, 0, -766394896, 0, -753085696, 0, -748250896, 0, -744013696, 0, -734945296, 0, -721636096, 0, -717406096, 0, -713773696, 0, -702890896, 0, -690186496, 0, -687166096, 0, -682928896, 0, -671441296, 0, -658736896, 0, -656321296, 0, -652084096, 0, -639991696, 0, -626682496, 0, -625476496, 0, -621844096, 0, -608542096, 0, -595232896, 0, -577092496 } typeOffsets:intvector { 8423, 0, 7200, 0, 7200, 3600 } - typeMap:bin { "01020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } + typeMap:bin { "0102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201020102010201" } finalRule { "Palestine" } finalRaw:int { 7200 } finalYear:int { 2088 } } //Z#272 /* Asia/Ho_Chi_Minh */ :table { - trans:intvector { -1851577590, -852105600, -782643600, -767869200, -718095600, -457776000, -315648000, 171820800 } + trans:intvector { -1851577590, -852105600, -782643600, -767869200, -718095600, -457772400, -315648000, 171820800 } typeOffsets:intvector { 25590, 0, 25200, 0, 28800, 0, 32400, 0 } typeMap:bin { "0102030102010201" } links:intvector { 273, 312, 634 } @@ -1444,9 +1448,9 @@ links:intvector { 250, 307 } } //Z#307 /* Asia/Qostanay */ :table { - trans:intvector { -1441167268, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000 } + trans:intvector { -1441167268, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695772000, 701816400, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1709229600 } typeOffsets:intvector { 15268, 0, 14400, 0, 14400, 3600, 18000, 0, 18000, 3600, 21600, 0 } - typeMap:bin { "010304050403040304030403040304030403040304030201030403040304030403040304030403040304030403040304030405" } + typeMap:bin { "01030405040304030403040304030403040304030403020103040304030403040304030403040304030403040304030403040503" } } //Z#308 /* Asia/Qyzylorda */ :table { trans:intvector { -1441167712, -1247544000, 354913200, 370720800, 386445600, 402256800, 417985200, 433792800, 449607600, 465339600, 481064400, 496789200, 512514000, 528238800, 543963600, 559688400, 575413200, 591138000, 606862800, 622587600, 638312400, 654642000, 670366800, 686095200, 695768400, 701812800, 717541200, 733266000, 748990800, 764715600, 780440400, 796165200, 811890000, 828219600, 846363600, 859669200, 877813200, 891118800, 909262800, 922568400, 941317200, 954018000, 972766800, 985467600, 1004216400, 1017522000, 1035666000, 1048971600, 1067115600, 1080421200, 1099170000, 1545328800 } @@ -1550,7 +1554,7 @@ trans:intvector { -1325483420 } typeOffsets:intvector { 21020, 0, 21600, 0 } typeMap:bin { "01" } - links:intvector { 238, 284, 331 } + links:intvector { 284, 331 } } //Z#331 /* Asia/Ust-Nera */ :table { trans:intvector { -1579426374, -1247558400, 354898800, 370699200, 386427600, 402235200, 417963600, 433771200, 449586000, 465318000, 481042800, 496767600, 512492400, 528217200, 543942000, 559666800, 575391600, 591116400, 606841200, 622566000, 638290800, 654620400, 670345200, 686073600, 695750400, 701794800, 717519600, 733244400, 748969200, 764694000, 780418800, 796143600, 811868400, 828198000, 846342000, 859647600, 877791600, 891097200, 909241200, 922546800, 941295600, 953996400, 972745200, 985446000, 1004194800, 1017500400, 1035644400, 1048950000, 1067094000, 1080399600, 1099148400, 1111849200, 1130598000, 1143298800, 1162047600, 1174748400, 1193497200, 1206802800, 1224946800, 1238252400, 1256396400, 1269702000, 1288450800, 1301151600, 1315828800, 1414249200 } @@ -2542,10 +2546,9 @@ typeOffsets:intvector { -14400, 0 } } //Z#604 /* SystemV/AST4ADT */ :table { - transPre32:intvector { -1, 2096195296, -1, 2111916496, -1, 2127644896, -1, 2143366096 } trans:intvector { -2135872800, -2120151600, -2104423200, -2088702000, -2072973600, -2056647600, -2040919200, -2025198000, -2009469600, -1993748400, -1978020000, -1962298800, -1946570400, -1930849200, -1915120800, -1898794800, -1883671200, -1867345200, -1851616800, -1835895600, -1820167200, -1804446000, -1788717600, -1772996400, -1757268000, -1741546800, -1725818400, -1709492400, -1693764000, -1678042800, -1662314400, -1646593200, -1630864800, -1615143600, -1599415200, -1583694000, -1567965600, -1551639600, -1536516000, -1520190000, -1504461600, -1488740400, -1473012000, -1457290800, -1441562400, -1425841200, -1410112800, -1394391600, -1378663200, -1362337200, -1347213600, -1330887600, -1315159200, -1299438000, -1283709600, -1267988400, -1252260000, -1236538800, -1220810400, -1205089200, -1189360800, -1173034800, -1157306400, -1141585200, -1125856800, -1110135600, -1094407200, -1078686000, -1062957600, -1047236400, -1031508000, -1015182000, -1000058400, -983732400, -968004000, -952282800, -936554400, -920833200, -905104800, -889383600, -873655200, -857934000, -842205600, -825879600, -810151200, -794430000, -778701600, -762980400, -747252000, -731530800, -715802400, -700081200, -684352800, -668026800, -652903200, -636577200, -620848800, -605127600, -589399200, -573678000, -557949600, -542228400, -526500000, -510778800, -495050400, -478724400, -463600800, -447274800, -431546400, -415825200, -400096800, -384375600, -368647200, -352926000, -337197600, -321476400, -305748000, -289422000, -273693600, -257972400, -242244000, -226522800, -210794400, -195073200, -179344800, -163623600, -147895200, -131569200, -116445600, -100119600, -84391200, -68670000, -52941600, -37220400, -21492000, -5770800, 9957600, 25678800, 41407200, 57733200, 73461600, 89182800, 104911200, 120632400, 126684000, 154501200, 162367200, 183531600, 199260000, 215586000 } typeOffsets:intvector { -14400, 0, -14400, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -14400 } finalYear:int { 1977 } @@ -2554,10 +2557,9 @@ typeOffsets:intvector { -21600, 0 } } //Z#606 /* SystemV/CST6CDT */ :table { - transPre32:intvector { -1, 2096202496, -1, 2111923696, -1, 2127652096, -1, 2143373296 } trans:intvector { -2135865600, -2120144400, -2104416000, -2088694800, -2072966400, -2056640400, -2040912000, -2025190800, -2009462400, -1993741200, -1978012800, -1962291600, -1946563200, -1930842000, -1915113600, -1898787600, -1883664000, -1867338000, -1851609600, -1835888400, -1820160000, -1804438800, -1788710400, -1772989200, -1757260800, -1741539600, -1725811200, -1709485200, -1693756800, -1678035600, -1662307200, -1646586000, -1630857600, -1615136400, -1599408000, -1583686800, -1567958400, -1551632400, -1536508800, -1520182800, -1504454400, -1488733200, -1473004800, -1457283600, -1441555200, -1425834000, -1410105600, -1394384400, -1378656000, -1362330000, -1347206400, -1330880400, -1315152000, -1299430800, -1283702400, -1267981200, -1252252800, -1236531600, -1220803200, -1205082000, -1189353600, -1173027600, -1157299200, -1141578000, -1125849600, -1110128400, -1094400000, -1078678800, -1062950400, -1047229200, -1031500800, -1015174800, -1000051200, -983725200, -967996800, -952275600, -936547200, -920826000, -905097600, -889376400, -873648000, -857926800, -842198400, -825872400, -810144000, -794422800, -778694400, -762973200, -747244800, -731523600, -715795200, -700074000, -684345600, -668019600, -652896000, -636570000, -620841600, -605120400, -589392000, -573670800, -557942400, -542221200, -526492800, -510771600, -495043200, -478717200, -463593600, -447267600, -431539200, -415818000, -400089600, -384368400, -368640000, -352918800, -337190400, -321469200, -305740800, -289414800, -273686400, -257965200, -242236800, -226515600, -210787200, -195066000, -179337600, -163616400, -147888000, -131562000, -116438400, -100112400, -84384000, -68662800, -52934400, -37213200, -21484800, -5763600, 9964800, 25686000, 41414400, 57740400, 73468800, 89190000, 104918400, 120639600, 126691200, 154508400, 162374400, 183538800, 199267200, 215593200 } typeOffsets:intvector { -21600, 0, -21600, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -21600 } finalYear:int { 1977 } @@ -2566,10 +2568,9 @@ typeOffsets:intvector { -18000, 0 } } //Z#608 /* SystemV/EST5EDT */ :table { - transPre32:intvector { -1, 2096198896, -1, 2111920096, -1, 2127648496, -1, 2143369696 } trans:intvector { -2135869200, -2120148000, -2104419600, -2088698400, -2072970000, -2056644000, -2040915600, -2025194400, -2009466000, -1993744800, -1978016400, -1962295200, -1946566800, -1930845600, -1915117200, -1898791200, -1883667600, -1867341600, -1851613200, -1835892000, -1820163600, -1804442400, -1788714000, -1772992800, -1757264400, -1741543200, -1725814800, -1709488800, -1693760400, -1678039200, -1662310800, -1646589600, -1630861200, -1615140000, -1599411600, -1583690400, -1567962000, -1551636000, -1536512400, -1520186400, -1504458000, -1488736800, -1473008400, -1457287200, -1441558800, -1425837600, -1410109200, -1394388000, -1378659600, -1362333600, -1347210000, -1330884000, -1315155600, -1299434400, -1283706000, -1267984800, -1252256400, -1236535200, -1220806800, -1205085600, -1189357200, -1173031200, -1157302800, -1141581600, -1125853200, -1110132000, -1094403600, -1078682400, -1062954000, -1047232800, -1031504400, -1015178400, -1000054800, -983728800, -968000400, -952279200, -936550800, -920829600, -905101200, -889380000, -873651600, -857930400, -842202000, -825876000, -810147600, -794426400, -778698000, -762976800, -747248400, -731527200, -715798800, -700077600, -684349200, -668023200, -652899600, -636573600, -620845200, -605124000, -589395600, -573674400, -557946000, -542224800, -526496400, -510775200, -495046800, -478720800, -463597200, -447271200, -431542800, -415821600, -400093200, -384372000, -368643600, -352922400, -337194000, -321472800, -305744400, -289418400, -273690000, -257968800, -242240400, -226519200, -210790800, -195069600, -179341200, -163620000, -147891600, -131565600, -116442000, -100116000, -84387600, -68666400, -52938000, -37216800, -21488400, -5767200, 9961200, 25682400, 41410800, 57736800, 73465200, 89186400, 104914800, 120636000, 126687600, 154504800, 162370800, 183535200, 199263600, 215589600 } typeOffsets:intvector { -18000, 0, -18000, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -18000 } finalYear:int { 1977 } @@ -2581,10 +2582,9 @@ typeOffsets:intvector { -25200, 0 } } //Z#611 /* SystemV/MST7MDT */ :table { - transPre32:intvector { -1, 2096206096, -1, 2111927296, -1, 2127655696, -1, 2143376896 } trans:intvector { -2135862000, -2120140800, -2104412400, -2088691200, -2072962800, -2056636800, -2040908400, -2025187200, -2009458800, -1993737600, -1978009200, -1962288000, -1946559600, -1930838400, -1915110000, -1898784000, -1883660400, -1867334400, -1851606000, -1835884800, -1820156400, -1804435200, -1788706800, -1772985600, -1757257200, -1741536000, -1725807600, -1709481600, -1693753200, -1678032000, -1662303600, -1646582400, -1630854000, -1615132800, -1599404400, -1583683200, -1567954800, -1551628800, -1536505200, -1520179200, -1504450800, -1488729600, -1473001200, -1457280000, -1441551600, -1425830400, -1410102000, -1394380800, -1378652400, -1362326400, -1347202800, -1330876800, -1315148400, -1299427200, -1283698800, -1267977600, -1252249200, -1236528000, -1220799600, -1205078400, -1189350000, -1173024000, -1157295600, -1141574400, -1125846000, -1110124800, -1094396400, -1078675200, -1062946800, -1047225600, -1031497200, -1015171200, -1000047600, -983721600, -967993200, -952272000, -936543600, -920822400, -905094000, -889372800, -873644400, -857923200, -842194800, -825868800, -810140400, -794419200, -778690800, -762969600, -747241200, -731520000, -715791600, -700070400, -684342000, -668016000, -652892400, -636566400, -620838000, -605116800, -589388400, -573667200, -557938800, -542217600, -526489200, -510768000, -495039600, -478713600, -463590000, -447264000, -431535600, -415814400, -400086000, -384364800, -368636400, -352915200, -337186800, -321465600, -305737200, -289411200, -273682800, -257961600, -242233200, -226512000, -210783600, -195062400, -179334000, -163612800, -147884400, -131558400, -116434800, -100108800, -84380400, -68659200, -52930800, -37209600, -21481200, -5760000, 9968400, 25689600, 41418000, 57744000, 73472400, 89193600, 104922000, 120643200, 126694800, 154512000, 162378000, 183542400, 199270800, 215596800 } typeOffsets:intvector { -25200, 0, -25200, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -25200 } finalYear:int { 1977 } @@ -2593,10 +2593,9 @@ typeOffsets:intvector { -28800, 0 } } //Z#613 /* SystemV/PST8PDT */ :table { - transPre32:intvector { -1, 2096209696, -1, 2111930896, -1, 2127659296, -1, 2143380496 } trans:intvector { -2135858400, -2120137200, -2104408800, -2088687600, -2072959200, -2056633200, -2040904800, -2025183600, -2009455200, -1993734000, -1978005600, -1962284400, -1946556000, -1930834800, -1915106400, -1898780400, -1883656800, -1867330800, -1851602400, -1835881200, -1820152800, -1804431600, -1788703200, -1772982000, -1757253600, -1741532400, -1725804000, -1709478000, -1693749600, -1678028400, -1662300000, -1646578800, -1630850400, -1615129200, -1599400800, -1583679600, -1567951200, -1551625200, -1536501600, -1520175600, -1504447200, -1488726000, -1472997600, -1457276400, -1441548000, -1425826800, -1410098400, -1394377200, -1378648800, -1362322800, -1347199200, -1330873200, -1315144800, -1299423600, -1283695200, -1267974000, -1252245600, -1236524400, -1220796000, -1205074800, -1189346400, -1173020400, -1157292000, -1141570800, -1125842400, -1110121200, -1094392800, -1078671600, -1062943200, -1047222000, -1031493600, -1015167600, -1000044000, -983718000, -967989600, -952268400, -936540000, -920818800, -905090400, -889369200, -873640800, -857919600, -842191200, -825865200, -810136800, -794415600, -778687200, -762966000, -747237600, -731516400, -715788000, -700066800, -684338400, -668012400, -652888800, -636562800, -620834400, -605113200, -589384800, -573663600, -557935200, -542214000, -526485600, -510764400, -495036000, -478710000, -463586400, -447260400, -431532000, -415810800, -400082400, -384361200, -368632800, -352911600, -337183200, -321462000, -305733600, -289407600, -273679200, -257958000, -242229600, -226508400, -210780000, -195058800, -179330400, -163609200, -147880800, -131554800, -116431200, -100105200, -84376800, -68655600, -52927200, -37206000, -21477600, -5756400, 9972000, 25693200, 41421600, 57747600, 73476000, 89197200, 104925600, 120646800, 126698400, 154515600, 162381600, 183546000, 199274400, 215600400 } typeOffsets:intvector { -28800, 0, -28800, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -28800 } finalYear:int { 1977 } @@ -2605,10 +2604,9 @@ typeOffsets:intvector { -32400, 0 } } //Z#615 /* SystemV/YST9YDT */ :table { - transPre32:intvector { -1, 2096213296, -1, 2111934496, -1, 2127662896, -1, 2143384096 } trans:intvector { -2135854800, -2120133600, -2104405200, -2088684000, -2072955600, -2056629600, -2040901200, -2025180000, -2009451600, -1993730400, -1978002000, -1962280800, -1946552400, -1930831200, -1915102800, -1898776800, -1883653200, -1867327200, -1851598800, -1835877600, -1820149200, -1804428000, -1788699600, -1772978400, -1757250000, -1741528800, -1725800400, -1709474400, -1693746000, -1678024800, -1662296400, -1646575200, -1630846800, -1615125600, -1599397200, -1583676000, -1567947600, -1551621600, -1536498000, -1520172000, -1504443600, -1488722400, -1472994000, -1457272800, -1441544400, -1425823200, -1410094800, -1394373600, -1378645200, -1362319200, -1347195600, -1330869600, -1315141200, -1299420000, -1283691600, -1267970400, -1252242000, -1236520800, -1220792400, -1205071200, -1189342800, -1173016800, -1157288400, -1141567200, -1125838800, -1110117600, -1094389200, -1078668000, -1062939600, -1047218400, -1031490000, -1015164000, -1000040400, -983714400, -967986000, -952264800, -936536400, -920815200, -905086800, -889365600, -873637200, -857916000, -842187600, -825861600, -810133200, -794412000, -778683600, -762962400, -747234000, -731512800, -715784400, -700063200, -684334800, -668008800, -652885200, -636559200, -620830800, -605109600, -589381200, -573660000, -557931600, -542210400, -526482000, -510760800, -495032400, -478706400, -463582800, -447256800, -431528400, -415807200, -400078800, -384357600, -368629200, -352908000, -337179600, -321458400, -305730000, -289404000, -273675600, -257954400, -242226000, -226504800, -210776400, -195055200, -179326800, -163605600, -147877200, -131551200, -116427600, -100101600, -84373200, -68652000, -52923600, -37202400, -21474000, -5752800, 9975600, 25696800, 41425200, 57751200, 73479600, 89200800, 104929200, 120650400, 126702000, 154519200, 162385200, 183549600, 199278000, 215604000 } typeOffsets:intvector { -32400, 0, -32400, 3600 } - typeMap:bin { "01000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } + typeMap:bin { "010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100010001000100" } finalRule { "SystemV" } finalRaw:int { -32400 } finalYear:int { 1977 } diff -Nru thunderbird-115.8.0/ipc/glue/GeckoChildProcessHost.cpp thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.cpp --- thunderbird-115.8.0/ipc/glue/GeckoChildProcessHost.cpp 2024-02-16 23:38:27.000000000 +0000 +++ thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.cpp 2024-03-15 16:02:34.000000000 +0000 @@ -263,8 +263,7 @@ WindowsProcessLauncher(GeckoChildProcessHost* aHost, std::vector&& aExtraOpts) : BaseProcessLauncher(aHost, std::move(aExtraOpts)), - mCachedNtdllThunk(GetCachedNtDllThunk()), - mWerDataPointer(&(aHost->mWerData)) {} + mCachedNtdllThunk(GetCachedNtDllThunk()) {} protected: bool SetChannel(IPC::Channel*) override { return true; } @@ -276,7 +275,6 @@ bool mUseSandbox = false; const Buffer* mCachedNtdllThunk; - CrashReporter::WindowsErrorReportingData const* mWerDataPointer; }; typedef WindowsProcessLauncher ProcessLauncher; #endif // XP_WIN @@ -399,9 +397,6 @@ mProcessState(CREATING_CHANNEL), #ifdef XP_WIN mGroupId(u"-"), - mWerData{.mWerNotifyProc = CrashReporter::WerNotifyProc, - .mChildPid = 0, - .mMinidumpFile = {}}, #endif #if defined(MOZ_SANDBOX) && defined(XP_WIN) mEnableSandboxLogging(false), @@ -1587,10 +1582,6 @@ mLaunchOptions->handles_to_inherit.push_back(reinterpret_cast(h)); std::string hStr = std::to_string(h); mCmdLine->AppendLooseValue(UTF8ToWide(hStr)); - - char werDataAddress[17] = {}; - SprintfLiteral(werDataAddress, "%p", mWerDataPointer); - mCmdLine->AppendLooseValue(UTF8ToWide(werDataAddress)); } // Process type diff -Nru thunderbird-115.8.0/ipc/glue/GeckoChildProcessHost.h thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.h --- thunderbird-115.8.0/ipc/glue/GeckoChildProcessHost.h 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/ipc/glue/GeckoChildProcessHost.h 2024-03-15 16:02:35.000000000 +0000 @@ -258,7 +258,6 @@ #ifdef XP_WIN void InitWindowsGroupID(); nsString mGroupId; - CrashReporter::WindowsErrorReportingData mWerData; # ifdef MOZ_SANDBOX RefPtr mSandboxBroker; std::vector mAllowedFilesRead; diff -Nru thunderbird-115.8.0/js/src/builtin/intl/TimeZoneDataGenerated.h thunderbird-115.9.0/js/src/builtin/intl/TimeZoneDataGenerated.h --- thunderbird-115.8.0/js/src/builtin/intl/TimeZoneDataGenerated.h 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/builtin/intl/TimeZoneDataGenerated.h 2024-03-15 16:02:34.000000000 +0000 @@ -1,5 +1,5 @@ // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a #ifndef builtin_intl_TimeZoneDataGenerated_h #define builtin_intl_TimeZoneDataGenerated_h @@ -22,8 +22,14 @@ "America/Ensenada", // America/Tijuana [backzone] "America/Indiana/Indianapolis", // America/Indianapolis [northamerica] "America/Kentucky/Louisville", // America/Louisville [northamerica] + "America/Montreal", // America/Toronto [backzone] + "America/Nipigon", // America/Toronto [backzone] "America/Nuuk", // America/Godthab [europe] + "America/Pangnirtung", // America/Iqaluit [backzone] + "America/Rainy_River", // America/Winnipeg [backzone] "America/Rosario", // America/Cordoba [backzone] + "America/Thunder_Bay", // America/Toronto [backzone] + "America/Yellowknife", // America/Edmonton [backzone] "Asia/Chongqing", // Asia/Shanghai [backzone] "Asia/Harbin", // Asia/Shanghai [backzone] "Asia/Ho_Chi_Minh", // Asia/Saigon [asia] @@ -34,13 +40,17 @@ "Asia/Yangon", // Asia/Rangoon [asia] "Atlantic/Faroe", // Atlantic/Faeroe [europe] "Atlantic/Jan_Mayen", // Arctic/Longyearbyen [backzone] + "Australia/Currie", // Australia/Hobart [backzone] "EST", // Etc/GMT+5 [northamerica] "Europe/Belfast", // Europe/London [backzone] "Europe/Kyiv", // Europe/Kiev [europe] "Europe/Tiraspol", // Europe/Chisinau [backzone] + "Europe/Uzhgorod", // Europe/Kiev [backzone] + "Europe/Zaporozhye", // Europe/Kiev [backzone] "HST", // Etc/GMT+10 [northamerica] "MST", // Etc/GMT+7 [northamerica] "Pacific/Chuuk", // Pacific/Truk [backzone] + "Pacific/Johnston", // Pacific/Honolulu [backzone] "Pacific/Kanton", // Pacific/Enderbury [australasia] "Pacific/Pohnpei", // Pacific/Ponape [backzone] }; @@ -67,7 +77,6 @@ { "America/Lower_Princes", "America/Curacao" }, // America/Lower_Princes [backward] { "America/Marigot", "America/Port_of_Spain" }, // America/Marigot [backward] { "America/Mendoza", "America/Argentina/Mendoza" }, // America/Mendoza [backward] - { "America/Santa_Isabel", "America/Tijuana" }, // America/Santa_Isabel [backward] { "America/St_Barthelemy", "America/Port_of_Spain" }, // America/St_Barthelemy [backward] { "Antarctica/South_Pole", "Antarctica/McMurdo" }, // Pacific/Auckland [backward] { "Arctic/Longyearbyen", "Europe/Oslo" }, // Arctic/Longyearbyen [backward] diff -Nru thunderbird-115.8.0/js/src/jit/arm/MacroAssembler-arm.cpp thunderbird-115.9.0/js/src/jit/arm/MacroAssembler-arm.cpp --- thunderbird-115.8.0/js/src/jit/arm/MacroAssembler-arm.cpp 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/jit/arm/MacroAssembler-arm.cpp 2024-03-15 16:02:35.000000000 +0000 @@ -5843,11 +5843,13 @@ masm.quotient32(rhs, lhsOutput, isUnsigned); } } else { - // Ensure that the output registers are saved and restored properly, - MOZ_ASSERT(volatileLiveRegs.has(ReturnRegVal0)); - MOZ_ASSERT(volatileLiveRegs.has(ReturnRegVal1)); + // Ensure that the output registers are saved and restored properly. + LiveRegisterSet liveRegs = volatileLiveRegs; + liveRegs.addUnchecked(ReturnRegVal0); + liveRegs.addUnchecked(ReturnRegVal1); + + masm.PushRegsInMask(liveRegs); - masm.PushRegsInMask(volatileLiveRegs); using Fn = int64_t (*)(int, int); { ScratchRegisterScope scratch(masm); @@ -5870,7 +5872,7 @@ LiveRegisterSet ignore; ignore.add(lhsOutput); - masm.PopRegsInMaskIgnore(volatileLiveRegs, ignore); + masm.PopRegsInMaskIgnore(liveRegs, ignore); } } @@ -5899,10 +5901,12 @@ remainder32(rhs, remOutput, isUnsigned); quotient32(rhs, lhsOutput, isUnsigned); } else { - // Ensure that the output registers are saved and restored properly, - MOZ_ASSERT(volatileLiveRegs.has(ReturnRegVal0)); - MOZ_ASSERT(volatileLiveRegs.has(ReturnRegVal1)); - PushRegsInMask(volatileLiveRegs); + // Ensure that the output registers are saved and restored properly. + LiveRegisterSet liveRegs = volatileLiveRegs; + liveRegs.addUnchecked(ReturnRegVal0); + liveRegs.addUnchecked(ReturnRegVal1); + + PushRegsInMask(liveRegs); using Fn = int64_t (*)(int, int); { @@ -5923,7 +5927,7 @@ LiveRegisterSet ignore; ignore.add(remOutput); ignore.add(lhsOutput); - PopRegsInMaskIgnore(volatileLiveRegs, ignore); + PopRegsInMaskIgnore(liveRegs, ignore); } } diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backward_links.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a const tzMapper = [ x => x, diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a const tzMapper = [ x => x, @@ -81,7 +81,6 @@ "Antarctica/DumontDUrville": "Antarctica/DumontDUrville", "Antarctica/McMurdo": "Antarctica/McMurdo", "Antarctica/Syowa": "Antarctica/Syowa", - "Antarctica/Vostok": "Antarctica/Vostok", "Asia/Aden": "Asia/Aden", "Asia/Bahrain": "Asia/Bahrain", "Asia/Brunei": "Asia/Brunei", diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_backzone_links.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a const tzMapper = [ x => x, diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_notbackward_links.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a const tzMapper = [ x => x, diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/DateTimeFormat/timeZone_version.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,8 +1,8 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c -const tzdata = "2023c"; +// tzdata version = 2024a +const tzdata = "2024a"; if (typeof getICUOptions === "undefined") { var getICUOptions = SpecialPowers.Cu.getJSTestingFunctions().getICUOptions; diff -Nru thunderbird-115.8.0/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js thunderbird-115.9.0/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js --- thunderbird-115.8.0/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js 2024-02-16 23:38:28.000000000 +0000 +++ thunderbird-115.9.0/js/src/tests/non262/Intl/supportedValuesOf-timeZones-canonical.js 2024-03-15 16:02:35.000000000 +0000 @@ -1,7 +1,7 @@ // |reftest| skip-if(!this.hasOwnProperty("Intl")) // Generated by make_intl_data.py. DO NOT EDIT. -// tzdata version = 2023c +// tzdata version = 2024a // This file was generated with historical, pre-1970 backzone information // respected. diff -Nru thunderbird-115.8.0/layout/generic/test/file_bug514732_window.xhtml thunderbird-115.9.0/layout/generic/test/file_bug514732_window.xhtml --- thunderbird-115.8.0/layout/generic/test/file_bug514732_window.xhtml 2024-02-16 23:38:32.000000000 +0000 +++ thunderbird-115.9.0/layout/generic/test/file_bug514732_window.xhtml 2024-03-15 16:02:39.000000000 +0000 @@ -5,7 +5,7 @@ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="600" height="600" - onload="setTimeout(nextTest,0);" + onload="setTimeout(startTests,0);" title="bug 514732 test"> diff -Nru thunderbird-115.8.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001-ref.html thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001-ref.html --- thunderbird-115.8.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001-ref.html 2024-02-16 23:38:32.000000000 +0000 +++ thunderbird-115.9.0/layout/reftests/css-grid/grid-repeat-auto-fill-fit-001-ref.html 2024-03-15 16:02:39.000000000 +0000 @@ -10,6 +10,8 @@