diff options
Diffstat (limited to 'deps/v8/test/intl/date-format/property-override-time-style.js')
-rw-r--r-- | deps/v8/test/intl/date-format/property-override-time-style.js | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/deps/v8/test/intl/date-format/property-override-time-style.js b/deps/v8/test/intl/date-format/property-override-time-style.js new file mode 100644 index 0000000000..1b93ac633f --- /dev/null +++ b/deps/v8/test/intl/date-format/property-override-time-style.js @@ -0,0 +1,54 @@ +// Copyright 2019 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. + +// Flags: --harmony-intl-datetime-style + +// Checks for security holes introduced by Object.property overrides. +// For example: +// Object.defineProperty(Array.prototype, 'locale', { +// set: function(value) { +// throw new Error('blah'); +// }, +// configurable: true, +// enumerable: false +// }); +// +// would throw in case of (JS) x.locale = 'us' or (C++) x->Set('locale', 'us'). + +// First get supported properties. +// Some of the properties are optional, so we request them. +var properties = []; +var options = Intl.DateTimeFormat( + 'en-US', {timeStyle: 'full'}).resolvedOptions(); +for (var prop in options) { + if (options.hasOwnProperty(prop)) { + properties.push(prop); + } +} + +// In the order of Table 6 of +// ecma402 #sec-intl.datetimeformat.prototype.resolvedoptions +var expectedProperties = [ + 'locale', + 'calendar', + 'numberingSystem', + 'timeZone', + 'hourCycle', + 'hour12', + 'hour', + 'minute', + 'second', + 'timeZoneName', + 'timeStyle', +]; + +assertEquals(expectedProperties.length, properties.length); + +properties.forEach(function(prop) { + assertFalse(expectedProperties.indexOf(prop) === -1); +}); + +taintProperties(properties); + +var locale = Intl.DateTimeFormat().resolvedOptions().locale; |