Module: wine Branch: master Commit: 6b1e54a28efb8cf2475ff2dedb4b158a16020850 URL: https://source.winehq.org/git/wine.git/?a=commit;h=6b1e54a28efb8cf2475ff2ded...
Author: Jacek Caban jacek@codeweavers.com Date: Fri May 11 14:43:40 2018 +0200
jscript: Make global constants non-writable in ES5 mode.
Signed-off-by: Jacek Caban jacek@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/jscript/global.c | 7 ++++--- dlls/mshtml/tests/es5.js | 20 +++++++++++++++++++- 2 files changed, 23 insertions(+), 4 deletions(-)
diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index 6cd5ee9..732b020 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -1087,6 +1087,7 @@ static HRESULT init_constructors(script_ctx_t *ctx, jsdisp_t *object_prototype)
HRESULT init_global(script_ctx_t *ctx) { + unsigned const_flags = ctx->version >= SCRIPTLANGUAGEVERSION_ES5 ? 0 : PROPF_WRITABLE; jsdisp_t *math, *object_prototype, *constr; HRESULT hres;
@@ -1137,14 +1138,14 @@ HRESULT init_global(script_ctx_t *ctx) if(FAILED(hres)) return hres;
- hres = jsdisp_propput_dontenum(ctx->global, undefinedW, jsval_undefined()); + hres = jsdisp_define_data_property(ctx->global, undefinedW, const_flags, jsval_undefined()); if(FAILED(hres)) return hres;
- hres = jsdisp_propput_dontenum(ctx->global, NaNW, jsval_number(NAN)); + hres = jsdisp_define_data_property(ctx->global, NaNW, const_flags, jsval_number(NAN)); if(FAILED(hres)) return hres;
- hres = jsdisp_propput_dontenum(ctx->global, InfinityW, jsval_number(INFINITY)); + hres = jsdisp_define_data_property(ctx->global, InfinityW, const_flags, jsval_number(INFINITY)); return hres; } diff --git a/dlls/mshtml/tests/es5.js b/dlls/mshtml/tests/es5.js index 92024cf..c2e3e9f 100644 --- a/dlls/mshtml/tests/es5.js +++ b/dlls/mshtml/tests/es5.js @@ -284,6 +284,23 @@ function test_defineProperty() { next_test(); }
+function test_global_properties() { + var o; + + /* Make sure that global properties are not writable. */ + o = NaN; + NaN = 1; + ok(isNaN(NaN), "NaN = " + NaN); + o = undefined; + undefined = 1; + ok(undefined === o, "NaN = " + NaN); + o = Infinity; + Infinity = 1; + ok(Infinity === o, "Infinity = " + NaN); + + next_test(); +} + var tests = [ test_date_now, test_toISOString, @@ -291,5 +308,6 @@ var tests = [ test_isArray, test_identifier_keywords, test_getOwnPropertyDescriptor, - test_defineProperty + test_defineProperty, + test_global_properties ];