diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-26 14:52:46 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-08-26 14:52:46 +0000 |
commit | 1224ec28b4355cceffb872eaa045daa97c8b9ade (patch) | |
tree | 933774599715f7c8484b092c862db2054f616527 /webkit | |
parent | a3f00819250da2d070436e571911b0ca0c90c099 (diff) | |
download | chromium_src-1224ec28b4355cceffb872eaa045daa97c8b9ade.zip chromium_src-1224ec28b4355cceffb872eaa045daa97c8b9ade.tar.gz chromium_src-1224ec28b4355cceffb872eaa045daa97c8b9ade.tar.bz2 |
DevTools: Sanitize objects being serialized so that prototype.js did not affect JSON.stringify.
BUG=19850
Review URL: http://codereview.chromium.org/160098
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@24440 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit')
-rw-r--r-- | webkit/glue/devtools/js/inject_dispatch.js | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/webkit/glue/devtools/js/inject_dispatch.js b/webkit/glue/devtools/js/inject_dispatch.js index 9cc68f7..4b8ec04 100644 --- a/webkit/glue/devtools/js/inject_dispatch.js +++ b/webkit/glue/devtools/js/inject_dispatch.js @@ -28,7 +28,25 @@ function devtools$$dispatch(functionName, json_args) { var params = JSON.parse(json_args); var result = devtools$$obj[functionName].apply(devtools$$obj, params); return JSON.stringify(result); -}; +} + + +/** + * Removes malicious functions from the objects so that the pure JSON.stringify + * was used. + */ +function sanitizeJson(obj) { + for (var name in obj) { + var property = obj[name]; + var type = typeof property; + if (type === "function") { + obj[name] = null; + } else if (obj !== null && type === "object") { + sanitizeJson(property); + } + } + return obj; +} /** @@ -48,6 +66,7 @@ var dispatch = function(method, var_args) { // parameters. return; } - var call = JSON.stringify(args); + + var call = JSON.stringify(sanitizeJson(args)); DevToolsAgentHost.dispatch(call); }; |