DateConversion::formatDateTime incorrectly formats negative years
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2019 19:31:13 +0000 (19:31 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 15 Aug 2019 19:31:13 +0000 (19:31 +0000)
https://bugs.webkit.org/show_bug.cgi?id=199964

Patch by Alexey Shvayka <shvaikalesh@gmail.com> on 2019-08-15
Reviewed by Ross Kirsling.

JSTests:

* test262/expectations.yaml: Mark 6 test cases as passing.

Source/JavaScriptCore:

Currently, year is always padded to max length of 4, including the minus sign "-".
With this change, only absolute value of year is padded to max length of 4 and
preceded by minus sign "-" if the year is negative.
(steps 6-10 of https://tc39.es/ecma262/#sec-datestring)

* runtime/DateConversion.cpp:
(JSC::appendNumber):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@248738 268f45cc-cd09-0410-ab3c-d52691b4dbfc

JSTests/ChangeLog
JSTests/test262/expectations.yaml
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/DateConversion.cpp

index bceaf5b..98bec5f 100644 (file)
@@ -1,3 +1,12 @@
+2019-08-15  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        DateConversion::formatDateTime incorrectly formats negative years
+        https://bugs.webkit.org/show_bug.cgi?id=199964
+
+        Reviewed by Ross Kirsling.
+
+        * test262/expectations.yaml: Mark 6 test cases as passing.
+
 2019-08-15  Mark Lam  <mark.lam@apple.com>
 
         More missing exception checks in String.prototype.
index c95f390..40ddbdb 100644 (file)
@@ -858,9 +858,6 @@ test/built-ins/Date/proto-from-ctor-realm-two.js:
 test/built-ins/Date/proto-from-ctor-realm-zero.js:
   default: 'TypeError: Type error'
   strict mode: 'TypeError: Type error'
-test/built-ins/Date/prototype/toDateString/negative-year.js:
-  default: 'Test262Error: Date.prototype.toDateString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
-  strict mode: 'Test262Error: Date.prototype.toDateString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
 test/built-ins/Date/prototype/toJSON/invoke-result.js:
   default: 'TypeError: toISOString did not return a primitive value'
   strict mode: 'TypeError: toISOString did not return a primitive value'
@@ -873,12 +870,6 @@ test/built-ins/Date/prototype/toJSON/to-primitive-symbol.js:
 test/built-ins/Date/prototype/toJSON/to-primitive-value-of.js:
   default: 'TypeError: toISOString did not return a primitive value'
   strict mode: 'TypeError: toISOString did not return a primitive value'
-test/built-ins/Date/prototype/toString/negative-year.js:
-  default: 'Test262Error: Date.prototype.toString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
-  strict mode: 'Test262Error: Date.prototype.toString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
-test/built-ins/Date/prototype/toUTCString/negative-year.js:
-  default: 'Test262Error: Date.prototype.toUTCString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
-  strict mode: 'Test262Error: Date.prototype.toUTCString serializes year -1 to "-0001" Expected SameValue(«-001», Â«-0001») to be true'
 test/built-ins/Error/proto-from-ctor-realm.js:
   default: 'Test262Error: Expected SameValue(«Error», Â«Error») to be true'
   strict mode: 'Test262Error: Expected SameValue(«Error», Â«Error») to be true'
index 6ffc77c..6c51bed 100644 (file)
@@ -1,3 +1,18 @@
+2019-08-15  Alexey Shvayka  <shvaikalesh@gmail.com>
+
+        DateConversion::formatDateTime incorrectly formats negative years
+        https://bugs.webkit.org/show_bug.cgi?id=199964
+
+        Reviewed by Ross Kirsling.
+
+        Currently, year is always padded to max length of 4, including the minus sign "-".
+        With this change, only absolute value of year is padded to max length of 4 and
+        preceded by minus sign "-" if the year is negative.
+        (steps 6-10 of https://tc39.es/ecma262/#sec-datestring)
+
+        * runtime/DateConversion.cpp:
+        (JSC::appendNumber):
+
 2019-08-15  Mark Lam  <mark.lam@apple.com>
 
         More missing exception checks in String.prototype.
index 73eea31..ae9f4e0 100644 (file)
@@ -41,14 +41,12 @@ using namespace WTF;
 template<int width>
 static inline void appendNumber(StringBuilder& builder, int value)
 {
-    int fillingZerosCount = width;
     if (value < 0) {
         builder.append('-');
         value = -value;
-        --fillingZerosCount;
     }
     String valueString = String::number(value);
-    fillingZerosCount -= valueString.length();
+    int fillingZerosCount = width - valueString.length();
     for (int i = 0; i < fillingZerosCount; ++i)
         builder.append('0');
     builder.append(valueString);