mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-12 04:45:45 +00:00
Bug 458959. this.JSON is enumerable. r+sr=mrbkap
This commit is contained in:
parent
c801f5aa4d
commit
70868d33ad
@ -2322,10 +2322,10 @@ SessionStoreService.prototype = {
|
||||
* @return the object's JSON representation
|
||||
*/
|
||||
_toJSONString: function sss_toJSONString(aJSObject) {
|
||||
let str = JSON.toString(aJSObject, ["_tab", "_hosts", "_formDataSaved"] /* keys to drop */);
|
||||
let str = JSONModule.toString(aJSObject, ["_tab", "_hosts", "_formDataSaved"] /* keys to drop */);
|
||||
|
||||
// sanity check - so that API consumers can just eval this string
|
||||
if (!JSON.isMostlyHarmless(str))
|
||||
if (!JSONModule.isMostlyHarmless(str))
|
||||
throw new Error("JSON conversion failed unexpectedly!");
|
||||
|
||||
return str;
|
||||
|
@ -115,7 +115,7 @@ function testEventDispatching() {
|
||||
|
||||
// expectedEvents should be empty now. If it's not, print errors.
|
||||
expectedEvents.forEach(function(e) {
|
||||
ok(false, "Didn't receive expected event: " + JSON.toString(e));
|
||||
ok(false, "Didn't receive expected event: " + JSON.parse(e));
|
||||
});
|
||||
};
|
||||
let i = 0;
|
||||
@ -213,7 +213,6 @@ function testDefaultHandling() {
|
||||
|
||||
function runTests() {
|
||||
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
|
||||
Components.utils.import("resource://gre/modules/JSON.jsm");
|
||||
|
||||
testEventDispatching();
|
||||
|
||||
|
@ -913,7 +913,8 @@ js_InitJSONClass(JSContext *cx, JSObject *obj)
|
||||
if (!JSON)
|
||||
return NULL;
|
||||
if (!JS_DefineProperty(cx, obj, js_JSON_str, OBJECT_TO_JSVAL(JSON),
|
||||
JS_PropertyStub, JS_PropertyStub, JSPROP_ENUMERATE))
|
||||
JS_PropertyStub, JS_PropertyStub,
|
||||
JSPROP_READONLY | JSPROP_PERMANENT))
|
||||
return NULL;
|
||||
|
||||
if (!JS_DefineFunctions(cx, JSON, json_static_methods))
|
||||
|
@ -44,14 +44,14 @@
|
||||
*
|
||||
* Usage:
|
||||
*
|
||||
* var newJSONString = JSON.toString( GIVEN_JAVASCRIPT_OBJECT );
|
||||
* var newJavaScriptObject = JSON.fromString( GIVEN_JSON_STRING );
|
||||
* var newJSONString = JSONModule.toString( GIVEN_JAVASCRIPT_OBJECT );
|
||||
* var newJavaScriptObject = JSONModule.fromString( GIVEN_JSON_STRING );
|
||||
*
|
||||
* Note: For your own safety, Objects/Arrays returned by
|
||||
* JSON.fromString aren't instanceof Object/Array.
|
||||
* JSONModule.fromString aren't instanceof Object/Array.
|
||||
*/
|
||||
|
||||
var EXPORTED_SYMBOLS = ["JSON"];
|
||||
var EXPORTED_SYMBOLS = ["JSONModule"];
|
||||
|
||||
// The following code is a loose adaption of Douglas Crockford's code
|
||||
// from http://www.json.org/json.js (public domain'd)
|
||||
@ -61,7 +61,7 @@ var EXPORTED_SYMBOLS = ["JSON"];
|
||||
// silently dropped but always lead to a TypeError.
|
||||
// * An optional key blacklist has been added to JSON.toString
|
||||
|
||||
var JSON = {
|
||||
var JSONModule = {
|
||||
/**
|
||||
* Converts a JavaScript object into a JSON string.
|
||||
*
|
||||
|
@ -37,8 +37,8 @@
|
||||
function run_test() {
|
||||
// converts an object to a JSON string and tests its integrity
|
||||
function toJSONString(a) {
|
||||
var res = JSON.toString(a);
|
||||
if (!JSON.isMostlyHarmless(res))
|
||||
var res = JSONModule.toString(a);
|
||||
if (!JSONModule.isMostlyHarmless(res))
|
||||
throw new SyntaxError("Invalid JSON string: " + res);
|
||||
return res;
|
||||
}
|
||||
@ -46,7 +46,7 @@ function run_test() {
|
||||
// ensures that an object can't be converted to a JSON string
|
||||
function isInvalidType(a) {
|
||||
try {
|
||||
JSON.toString(a);
|
||||
JSONModule.toString(a);
|
||||
return false;
|
||||
} catch (ex) {
|
||||
return ex.name == "TypeError";
|
||||
@ -55,15 +55,15 @@ function run_test() {
|
||||
// ensures that a string can't be converted back to a JavaScript object
|
||||
function isInvalidSyntax(a) {
|
||||
try {
|
||||
JSON.fromString(a);
|
||||
JSONModule.fromString(a);
|
||||
return false;
|
||||
} catch (ex) {
|
||||
return ex.name == "SyntaxError";
|
||||
}
|
||||
}
|
||||
|
||||
Components.utils.import("resource://gre/modules/JSON.jsm");
|
||||
do_check_eq(typeof(JSON), "object");
|
||||
Components.utils.import("resource://gre/modules/JSONModule.jsm");
|
||||
do_check_eq(typeof(JSONModule), "object");
|
||||
|
||||
// some of the tests are adapted from /testing/mochitest/tests/test_Base.js
|
||||
do_check_eq(toJSONString(true), "true");
|
||||
@ -89,50 +89,50 @@ function run_test() {
|
||||
|
||||
var obj = { a: 1, b: "2", c: [-3e+30] };
|
||||
do_check_eq(toJSONString(obj), '{"a":1,"b":"2","c":[-3e+30]}');
|
||||
do_check_eq(JSON.toString(obj, ["b", "c"] /* keys to drop */), '{"a":1}');
|
||||
do_check_eq(JSONModule.toString(obj, ["b", "c"] /* keys to drop */), '{"a":1}');
|
||||
|
||||
do_check_true(isInvalidType(function() { }));
|
||||
|
||||
// make sure that toJSONString actually works...
|
||||
do_check_eq(toJSONString(obj), JSON.toString(obj));
|
||||
do_check_eq(toJSONString(obj), JSONModule.toString(obj));
|
||||
|
||||
do_check_eq(JSON.fromString("true"), true);
|
||||
do_check_eq(JSON.fromString("false"), false);
|
||||
do_check_eq(JSON.fromString("1"), 1);
|
||||
do_check_eq(JSON.fromString('"2.2"'), "2.2");
|
||||
do_check_eq(JSON.fromString("1.23e-45"), 1.23e-45);
|
||||
do_check_eq(JSONModule.fromString("true"), true);
|
||||
do_check_eq(JSONModule.fromString("false"), false);
|
||||
do_check_eq(JSONModule.fromString("1"), 1);
|
||||
do_check_eq(JSONModule.fromString('"2.2"'), "2.2");
|
||||
do_check_eq(JSONModule.fromString("1.23e-45"), 1.23e-45);
|
||||
do_check_true(isInvalidSyntax("NaN"));
|
||||
|
||||
do_check_eq(JSON.fromString('"Foo-Bar \\b\\t\\n\\f\\r\\"\\\\ \\u0001\\u20ac"'),
|
||||
do_check_eq(JSONModule.fromString('"Foo-Bar \\b\\t\\n\\f\\r\\"\\\\ \\u0001\\u20ac"'),
|
||||
"Foo-Bar \b\t\n\f\r\"\\ \x01\u20ac");
|
||||
do_check_true(isInvalidSyntax('"multi\nline"'));
|
||||
do_check_eq(JSON.fromString("null"), null);
|
||||
do_check_eq(JSONModule.fromString("null"), null);
|
||||
do_check_true(isInvalidSyntax("."));
|
||||
|
||||
var res = JSON.fromString('[1,"2",3.3]');
|
||||
var res = JSONModule.fromString('[1,"2",3.3]');
|
||||
do_check_eq(res.length, 3);
|
||||
do_check_eq(res[2], 3.3);
|
||||
// res is an instance of the sandbox's array
|
||||
do_check_false(res instanceof Array);
|
||||
|
||||
res = JSON.fromString(toJSONString(obj));
|
||||
res = JSONModule.fromString(toJSONString(obj));
|
||||
do_check_eq(res.a, obj.a);
|
||||
do_check_eq(res.b, obj.b);
|
||||
do_check_eq(res.c.length, obj.c.length);
|
||||
do_check_eq(res.c[0], obj.c[0]);
|
||||
|
||||
// those would throw on JSON.fromString if there's no object |a|
|
||||
do_check_true(JSON.isMostlyHarmless("a"));
|
||||
do_check_true(JSON.isMostlyHarmless("a[0]"));
|
||||
do_check_true(JSON.isMostlyHarmless('a["alert(\\"P0wn3d!\\");"]'));
|
||||
// those would throw on JSONModule.fromString if there's no object |a|
|
||||
do_check_true(JSONModule.isMostlyHarmless("a"));
|
||||
do_check_true(JSONModule.isMostlyHarmless("a[0]"));
|
||||
do_check_true(JSONModule.isMostlyHarmless('a["alert(\\"P0wn3d!\\");"]'));
|
||||
|
||||
do_check_false(JSON.isMostlyHarmless('(function() { alert("P0wn3d!"); })()'));
|
||||
do_check_false(JSON.isMostlyHarmless('{ get a() { return "P0wn3d!"; } }'));
|
||||
do_check_false(JSONModule.isMostlyHarmless('(function() { alert("P0wn3d!"); })()'));
|
||||
do_check_false(JSONModule.isMostlyHarmless('{ get a() { return "P0wn3d!"; } }'));
|
||||
|
||||
// this string shouldn't cause a "script stack space quota is exhausted" error
|
||||
let bigString = " ";
|
||||
while (bigString.length < (1 << 22))
|
||||
bigString += bigString;
|
||||
|
||||
do_check_eq(JSON.fromString(toJSONString(bigString)), bigString);
|
||||
do_check_eq(JSONModule.fromString(toJSONString(bigString)), bigString);
|
||||
}
|
||||
|
@ -55,7 +55,6 @@ const HTTP_BAD_GATEWAY = 502;
|
||||
const HTTP_SERVICE_UNAVAILABLE = 503;
|
||||
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/JSON.jsm");
|
||||
|
||||
/**
|
||||
* SuggestAutoCompleteResult contains the results returned by the Suggest
|
||||
@ -523,7 +522,7 @@ SuggestAutoComplete.prototype = {
|
||||
|
||||
this._clearServerErrors();
|
||||
|
||||
var serverResults = JSON.fromString(responseText);
|
||||
var serverResults = JSON.parse(responseText);
|
||||
var searchString = serverResults[0] || "";
|
||||
var results = serverResults[1] || [];
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user