Index: test/intl/collator/property-override.js |
diff --git a/src/extensions/i18n/i18n-extension.h b/test/intl/collator/property-override.js |
similarity index 61% |
copy from src/extensions/i18n/i18n-extension.h |
copy to test/intl/collator/property-override.js |
index 050c336a67a21fd6cb32892e14215cac11971111..759a1d5ecc64e700cd76873be2e37205d8ed0855 100644 |
--- a/src/extensions/i18n/i18n-extension.h |
+++ b/test/intl/collator/property-override.js |
@@ -26,26 +26,41 @@ |
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// limitations under the License. |
-#ifndef V8_EXTENSIONS_I18N_I18N_EXTENSION_H_ |
-#define V8_EXTENSIONS_I18N_I18N_EXTENSION_H_ |
- |
-#include "v8.h" |
- |
-namespace v8_i18n { |
+// 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'). |
+// |
+// Update both collator.js and collator.cc so they have the same list of |
+// properties. |
-class Extension : public v8::Extension { |
- public: |
- Extension(); |
+// First get supported properties. |
+var properties = []; |
+var options = Intl.Collator().resolvedOptions(); |
+for (var prop in options) { |
+ if (options.hasOwnProperty(prop)) { |
+ properties.push(prop); |
+ } |
+} |
- virtual v8::Handle<v8::FunctionTemplate> GetNativeFunction( |
- v8::Handle<v8::String> name); |
+var expectedProperties = [ |
+ 'caseFirst', 'sensitivity', 'ignorePunctuation', |
+ 'locale', 'numeric', 'usage', 'collation' |
+]; |
- static void Register(); |
+assertEquals(expectedProperties.length, properties.length); |
- private: |
- static Extension* extension_; |
-}; |
+properties.forEach(function(prop) { |
+ assertFalse(expectedProperties.indexOf(prop) === -1); |
+}); |
-} // namespace v8_i18n |
+taintProperties(properties); |
-#endif // V8_EXTENSIONS_I18N_I18N_EXTENSION_H_ |
+var locale = Intl.Collator().resolvedOptions().locale; |