831bc23303
intl.js throws an exception when datetime-value to format is Infinity or NaN, but there was a way to thwart the check. Moreover, intl.js and runtime-intl.cc have unnecessary conversions of 'Number->Date->Number'. I removed the unnecessary conversion and made 'Number' be passed to %InternalDateFormat. With this streamlining, the work-around mentioned above does not work anymore. Add a check in runtime_intl.cc for Infinity/NaN and throw a RangeError. Add invalid-time test for invalid datetime-values passed to Intl.DateTimeFormat.format(). Bug: chromium:774833 Test: intl/date-format/invalid-time.js Cq-Include-Trybots: master.tryserver.v8:v8_linux_noi18n_rel_ng Change-Id: Idc575e532a86ee110dc4bb945ae023d6516650ee Reviewed-on: https://chromium-review.googlesource.com/724860 Commit-Queue: Jungshik Shin <jshin@chromium.org> Reviewed-by: Adam Klein <adamk@chromium.org> Cr-Commit-Position: refs/heads/master@{#48765}
21 lines
870 B
JavaScript
21 lines
870 B
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
var df = new Intl.DateTimeFormat();
|
|
|
|
assertThrows("df.format(Infinity)", RangeError);
|
|
assertThrows("df.formatToParts(Infinity)", RangeError);
|
|
assertThrows("df.format(-Infinity)", RangeError);
|
|
assertThrows("df.formatToParts(-Infinity)", RangeError);
|
|
assertThrows("df.format(NaN)", RangeError);
|
|
assertThrows("df.formatToParts(NaN)", RangeError);
|
|
|
|
// https://crbug.com/774833
|
|
var df2 = new Intl.DateTimeFormat('en', {'hour': 'numeric'});
|
|
Date.prototype.valueOf = "ponies";
|
|
assertEquals(df.format(Date.now()), df.format());
|
|
assertEquals(df2.format(Date.now()), df2.format());
|
|
assertEquals(df.formatToParts(Date.now()), df.formatToParts());
|
|
assertEquals(df2.formatToParts(Date.now()), df2.formatToParts());
|