Qian Hong : jscript: Ignore BOM mark in next_token.
Alexandre Julliard
julliard at wine.codeweavers.com
Thu Oct 2 16:29:22 CDT 2014
Module: wine
Branch: master
Commit: 66ba778cadcc092b390cd867ac05c7b55c1f7968
URL: http://source.winehq.org/git/wine.git/?a=commit;h=66ba778cadcc092b390cd867ac05c7b55c1f7968
Author: Qian Hong <qhong at codeweavers.com>
Date: Thu Oct 2 14:09:10 2014 +0800
jscript: Ignore BOM mark in next_token.
---
dlls/jscript/lex.c | 2 +-
dlls/jscript/tests/run.c | 53 ++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletion(-)
diff --git a/dlls/jscript/lex.c b/dlls/jscript/lex.c
index b4a3700..af4b24b 100644
--- a/dlls/jscript/lex.c
+++ b/dlls/jscript/lex.c
@@ -241,7 +241,7 @@ static BOOL skip_comment(parser_ctx_t *ctx)
static BOOL skip_spaces(parser_ctx_t *ctx)
{
- while(ctx->ptr < ctx->end && isspaceW(*ctx->ptr)) {
+ while(ctx->ptr < ctx->end && (isspaceW(*ctx->ptr) || *ctx->ptr == 0xFEFF /* UTF16 BOM */)) {
if(is_endline(*ctx->ptr++))
ctx->nl = TRUE;
}
diff --git a/dlls/jscript/tests/run.c b/dlls/jscript/tests/run.c
index aa1783e..452f810 100644
--- a/dlls/jscript/tests/run.c
+++ b/dlls/jscript/tests/run.c
@@ -144,6 +144,7 @@ DEFINE_EXPECT(DeleteMemberByDispID_false);
#define DISPID_TESTOBJ_ONLYDISPID 0x2001
#define DISPID_TESTOBJ_WITHPROP 0x2002
+#define JS_E_OUT_OF_MEMORY 0x800a03ec
#define JS_E_INVALID_CHAR 0x800a03f6
static const WCHAR testW[] = {'t','e','s','t',0};
@@ -1966,6 +1967,56 @@ static void test_script_exprs(void)
testing_expr = FALSE;
}
+struct bom_test
+{
+ WCHAR str[1024];
+ HRESULT hres;
+};
+
+static void run_bom_tests(void)
+{
+ BSTR src;
+ int i;
+ HRESULT hres;
+ struct bom_test bom_tests[] = {
+ {{'v','a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',')',';','\0'}, S_OK},
+ {{0xFEFF,'v','a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',')',';','\0'}, S_OK},
+ {{'v',0xFEFF,'a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',')',';','\0'}, JS_E_OUT_OF_MEMORY},
+ {{'v','a','r',0xFEFF,' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',')',';','\0'}, S_OK},
+ {{'v','a','r',' ','a',' ','=',' ','1',';',' ',0xFEFF,'r','e','p','o','r','t','S','u','c','c','e','s','s','(',')',';','\0'}, S_OK},
+ {{'v','a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t',0xFEFF,'S','u','c','c','e','s','s','(',')',';','\0'}, JS_E_OUT_OF_MEMORY},
+ {{'v','a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s',0xFEFF,'(',')',';','\0'}, S_OK},
+ {{'v','a','r',' ','a',' ','=',' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',0xFEFF,')',';','\0'}, S_OK},
+ {{'v','a','r',' ','a',' ','=',0xFEFF,' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',0xFEFF,')',';','\0'}, S_OK},
+ {{0xFEFF,'v','a','r',' ','a',' ','=',0xFEFF,0xFEFF,' ','1',';',' ','r','e','p','o','r','t','S','u','c','c','e','s','s','(',0xFEFF,')',';','\0'}, S_OK},
+ {{0}}
+ };
+
+ engine_clsid = &CLSID_JScript;
+
+ for (i = 0; bom_tests[i].str[0]; i++)
+ {
+ if(bom_tests[i].hres == S_OK)
+ {
+ SET_EXPECT(global_success_d);
+ SET_EXPECT(global_success_i);
+ src = SysAllocString(bom_tests[i].str);
+ hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, src);
+ ok(hres == S_OK, "test %s failed with %08x\n", wine_dbgstr_w(src), hres);
+ SysFreeString(src);
+ CHECK_CALLED(global_success_d);
+ CHECK_CALLED(global_success_i);
+ }
+ else
+ {
+ src = SysAllocString(bom_tests[i].str);
+ hres = parse_script(SCRIPTITEM_GLOBALMEMBERS, src);
+ todo_wine ok(hres == bom_tests[i].hres, "test %s returned with %08x\n", wine_dbgstr_w(src), hres);
+ SysFreeString(src);
+ }
+ }
+}
+
static BOOL run_tests(void)
{
HRESULT hres;
@@ -2259,6 +2310,8 @@ static BOOL run_tests(void)
"Object expected",
NULL);
+ run_bom_tests();
+
return TRUE;
}
More information about the wine-cvs
mailing list