Date: Wednesday, August 1, 2018 @ 15:20:01 Author: heftig Revision: 330414
Patch for failing test Added: js60/trunk/bug1415202.patch Modified: js60/trunk/PKGBUILD ------------------+ PKGBUILD | 10 ++-- bug1415202.patch | 129 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 134 insertions(+), 5 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2018-08-01 14:39:55 UTC (rev 330413) +++ PKGBUILD 2018-08-01 15:20:01 UTC (rev 330414) @@ -13,9 +13,11 @@ makedepends=(python2 zip autoconf2.13 mercurial) _repo=https://hg.mozilla.org/mozilla-unified source=("hg+$_repo#tag=FIREFOX_${pkgver//./_}esr_RELEASE" + bug1415202.patch mozjs60-fix-soname.patch mozjs52-include-configure-script.patch) sha256sums=('SKIP' + '9f316ab46d1c45b0051b43579e80d0d622c58d74230877a53b170c56e6aa0193' 'c792837930defe27355941080e9b80ec1d45003c097e4707860acc13d43bc519' 'd91a89acd88bfc747a255050757a0c17139bf5c3508c2e1c3c6bb2056786a344') @@ -23,6 +25,9 @@ cd mozilla-unified mkdir obj + # https://bugzilla.mozilla.org/show_bug.cgi?id=1479687 + patch -Np1 -i ../bug1415202.patch + # https://salsa.debian.org/gnome-team/mozjs52/tree/debian/master/debian/patches patch -Np1 -i ../mozjs60-fix-soname.patch patch -Np1 -i ../mozjs52-include-configure-script.patch @@ -60,11 +65,6 @@ local jstests_extra_args=( --format=none --exclude-random - - # non262/Date/time-zone-2038-pst.js:43:5 Error: Assertion failed: - # got "Sat Mar 31 2040 00:00:00 GMT-0700 (PST)", - # expected "Sat Mar 31 2040 00:00:00 GMT-0700 (PDT)" - --exclude non262/Date/time-zone-2038-pst.js ) jittest_extra_args=( --format=none --timeout 300 Added: bug1415202.patch =================================================================== --- bug1415202.patch (rev 0) +++ bug1415202.patch 2018-08-01 15:20:01 UTC (rev 330414) @@ -0,0 +1,129 @@ +# HG changeset patch +# User André Bargull <andre.barg...@gmail.com> +# Date 1510140221 28800 +# Wed Nov 08 03:23:41 2017 -0800 +# Node ID 8bf5e7460a7c5ba3430b501d1659c469a862a929 +# Parent 60fd4a5b01ec70ded9ddfd560fd5be191b1c74b9 +Bug 1415202: Always use the equivalent year to determine the time zone offset and name. r=Waldo + +diff --git a/js/src/jsdate.cpp b/js/src/jsdate.cpp +--- a/js/src/jsdate.cpp ++++ b/js/src/jsdate.cpp +@@ -2636,22 +2636,26 @@ ToPRMJTime(double localTime, double utcT + + return prtm; + } + + static size_t + FormatTime(char* buf, int buflen, const char* fmt, double utcTime, double localTime) + { + PRMJTime prtm = ToPRMJTime(localTime, utcTime); +- int eqivalentYear = IsRepresentableAsTime32(utcTime) +- ? prtm.tm_year +- : EquivalentYearForDST(prtm.tm_year); ++ ++ // If an equivalent year was used to compute the date/time components, use ++ // the same equivalent year to determine the time zone name and offset in ++ // PRMJ_FormatTime(...). ++ int timeZoneYear = IsRepresentableAsTime32(utcTime) ++ ? prtm.tm_year ++ : EquivalentYearForDST(prtm.tm_year); + int offsetInSeconds = (int) floor((localTime - utcTime) / msPerSecond); + +- return PRMJ_FormatTime(buf, buflen, fmt, &prtm, eqivalentYear, offsetInSeconds); ++ return PRMJ_FormatTime(buf, buflen, fmt, &prtm, timeZoneYear, offsetInSeconds); + } + + enum class FormatSpec { + DateTime, + Date, + Time + }; + +diff --git a/js/src/vm/Time.cpp b/js/src/vm/Time.cpp +--- a/js/src/vm/Time.cpp ++++ b/js/src/vm/Time.cpp +@@ -257,17 +257,17 @@ PRMJ_InvalidParameterHandler(const wchar + { + /* empty */ + } + #endif + + /* Format a time value into a buffer. Same semantics as strftime() */ + size_t + PRMJ_FormatTime(char* buf, int buflen, const char* fmt, const PRMJTime* prtm, +- int equivalentYear, int offsetInSeconds) ++ int timeZoneYear, int offsetInSeconds) + { + size_t result = 0; + #if defined(XP_UNIX) || defined(XP_WIN) + struct tm a; + #ifdef XP_WIN + _invalid_parameter_handler oldHandler; + #ifndef __MINGW32__ + int oldReportMode; +@@ -290,39 +290,33 @@ PRMJ_FormatTime(char* buf, int buflen, c + */ + #if defined(HAVE_LOCALTIME_R) && defined(HAVE_TM_ZONE_TM_GMTOFF) + char emptyTimeZoneId[] = ""; + { + /* + * Fill out |td| to the time represented by |prtm|, leaving the + * timezone fields zeroed out. localtime_r will then fill in the + * timezone fields for that local time according to the system's +- * timezone parameters. ++ * timezone parameters. Use |timeZoneYear| for the year to ensure the ++ * time zone name matches the time zone offset used by the caller. + */ + struct tm td; + memset(&td, 0, sizeof(td)); + td.tm_sec = prtm->tm_sec; + td.tm_min = prtm->tm_min; + td.tm_hour = prtm->tm_hour; + td.tm_mday = prtm->tm_mday; + td.tm_mon = prtm->tm_mon; + td.tm_wday = prtm->tm_wday; +- td.tm_year = prtm->tm_year - 1900; ++ td.tm_year = timeZoneYear - 1900; + td.tm_yday = prtm->tm_yday; + td.tm_isdst = prtm->tm_isdst; + + time_t t = mktime(&td); + +- // If |prtm| cannot be represented in |time_t| the year is probably +- // out of range, try again with the DST equivalent year. +- if (t == static_cast<time_t>(-1)) { +- td.tm_year = equivalentYear - 1900; +- t = mktime(&td); +- } +- + // If either mktime or localtime_r failed, fill in the fallback time + // zone offset |offsetInSeconds| and set the time zone identifier to + // the empty string. + if (t != static_cast<time_t>(-1) && localtime_r(&t, &td)) { + a.tm_gmtoff = td.tm_gmtoff; + a.tm_zone = td.tm_zone; + } else { + a.tm_gmtoff = offsetInSeconds; +diff --git a/js/src/vm/Time.h b/js/src/vm/Time.h +--- a/js/src/vm/Time.h ++++ b/js/src/vm/Time.h +@@ -50,17 +50,17 @@ PRMJ_NowShutdown(); + #else + inline void + PRMJ_NowShutdown() {} + #endif + + /* Format a time value into a buffer. Same semantics as strftime() */ + extern size_t + PRMJ_FormatTime(char* buf, int buflen, const char* fmt, const PRMJTime* tm, +- int equivalentYear, int offsetInSeconds); ++ int timeZoneYear, int offsetInSeconds); + + + /** + * Requesting the number of cycles from the CPU. + * + * `rdtsc`, or Read TimeStamp Cycle, is an instruction provided by + * x86-compatible CPUs that lets processes request the number of + * cycles spent by the CPU executing instructions since the CPU was