Commit c168918d authored by Jacek Caban's avatar Jacek Caban Committed by Alexandre Julliard

jscript: Throw type error fot Array.toString with wrong 'this' call.

parent a8c7e97d
...@@ -936,10 +936,8 @@ static HRESULT Array_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI ...@@ -936,10 +936,8 @@ static HRESULT Array_toString(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DI
TRACE("\n"); TRACE("\n");
array = array_this(jsthis); array = array_this(jsthis);
if(!array) { if(!array)
FIXME("not Array object\n"); return throw_type_error(ctx, ei, IDS_ARRAY_EXPECTED, NULL);
return E_FAIL;
}
return array_join(ctx, &array->dispex, array->length, default_separatorW, retv, ei, sp); return array_join(ctx, &array->dispex, array->length, default_separatorW, retv, ei, sp);
} }
......
...@@ -41,4 +41,5 @@ STRINGTABLE DISCARDABLE ...@@ -41,4 +41,5 @@ STRINGTABLE DISCARDABLE
IDS_JSCRIPT_EXPECTED "JScript object expected" IDS_JSCRIPT_EXPECTED "JScript object expected"
IDS_REGEXP_SYNTAX_ERROR "Syntax error in regular expression" IDS_REGEXP_SYNTAX_ERROR "Syntax error in regular expression"
IDS_INVALID_LENGTH "Array length must be a finite positive integer" IDS_INVALID_LENGTH "Array length must be a finite positive integer"
IDS_ARRAY_EXPECTED "Array object expected"
} }
...@@ -37,3 +37,4 @@ ...@@ -37,3 +37,4 @@
#define IDS_JSCRIPT_EXPECTED 0x1396 #define IDS_JSCRIPT_EXPECTED 0x1396
#define IDS_REGEXP_SYNTAX_ERROR 0x1399 #define IDS_REGEXP_SYNTAX_ERROR 0x1399
#define IDS_INVALID_LENGTH 0x13A5 #define IDS_INVALID_LENGTH 0x13A5
#define IDS_ARRAY_EXPECTED 0x13A7
...@@ -1621,6 +1621,69 @@ exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273); ...@@ -1621,6 +1621,69 @@ exception_test(function() {eval("'unterminated")}, "SyntaxError", -2146827273);
exception_test(function() {eval("nonexistingfunc()")}, "TypeError", -2146823281); exception_test(function() {eval("nonexistingfunc()")}, "TypeError", -2146823281);
exception_test(function() {RegExp(/a/, "g");}, "RegExpError", -2146823271); exception_test(function() {RegExp(/a/, "g");}, "RegExpError", -2146823271);
function testThisExcept(func, number) {
exception_test(function() {func.call(new Object())}, "TypeError", number);
}
function testBoolThis(func) {
testThisExcept(Boolean.prototype[func], -2146823278);
}
testBoolThis("toString");
testBoolThis("valueOf");
function testDateThis(func) {
testThisExcept(Date.prototype[func], -2146823282);
}
testDateThis("getDate");
testDateThis("getDay");
testDateThis("getFullYear");
testDateThis("getHours");
testDateThis("getMilliseconds");
testDateThis("getMinutes");
testDateThis("getMonth");
testDateThis("getSeconds");
testDateThis("getTime");
testDateThis("getTimezoneOffset");
testDateThis("getUTCDate");
testDateThis("getUTCDay");
testDateThis("getUTCFullYear");
testDateThis("getUTCHours");
testDateThis("getUTCMilliseconds");
testDateThis("getUTCMinutes");
testDateThis("getUTCMonth");
testDateThis("getUTCSeconds");
testDateThis("setDate");
testDateThis("setFullYear");
testDateThis("setHours");
testDateThis("setMilliseconds");
testDateThis("setMinutes");
testDateThis("setMonth");
testDateThis("setSeconds");
testDateThis("setTime");
testDateThis("setUTCDate");
testDateThis("setUTCFullYear");
testDateThis("setUTCHours");
testDateThis("setUTCMilliseconds");
testDateThis("setUTCMinutes");
testDateThis("setUTCMonth");
testDateThis("setUTCSeconds");
testDateThis("toDateString");
testDateThis("toLocaleDateString");
testDateThis("toLocaleString");
testDateThis("toLocaleTimeString");
testDateThis("toString");
testDateThis("toTimeString");
testDateThis("toUTCString");
testDateThis("valueOf");
function testArrayThis(func) {
testThisExcept(Array.prototype[func], -2146823257);
}
testArrayThis("toString");
function testArrayHostThis(func) { function testArrayHostThis(func) {
exception_test(function() { Array.prototype[func].call(testObj); }, "TypeError", -2146823274); exception_test(function() { Array.prototype[func].call(testObj); }, "TypeError", -2146823274);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment