From 45aee4fd6c6b1aca529d543b73cd3d8efcaa2a92 Mon Sep 17 00:00:00 2001 From: Jacek Caban Date: Thu, 30 Dec 2010 14:32:43 +0100 Subject: [PATCH] jscript: Fixed some math API assumption that cause test failures on Solaris. --- dlls/jscript/global.c | 2 +- dlls/jscript/math.c | 25 +++++++++++++++++++++---- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/dlls/jscript/global.c b/dlls/jscript/global.c index d1dddccd19..24698ac2e4 100644 --- a/dlls/jscript/global.c +++ b/dlls/jscript/global.c @@ -290,7 +290,7 @@ static HRESULT JSGlobal_escape(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, D for(ptr=str; *ptr; ptr++) { if(*ptr > 0xff) len += 6; - else if(isalnum((char)*ptr) || *ptr=='*' || *ptr=='@' || *ptr=='-' + else if(isalnum((unsigned char)*ptr) || *ptr=='*' || *ptr=='@' || *ptr=='-' || *ptr=='_' || *ptr=='+' || *ptr=='.' || *ptr=='/') len++; else diff --git a/dlls/jscript/math.c b/dlls/jscript/math.c index 765e015ff3..9fff6a9172 100644 --- a/dlls/jscript/math.c +++ b/dlls/jscript/math.c @@ -100,7 +100,13 @@ static HRESULT Math_acos(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPAR if(FAILED(hres)) return hres; - if(retv) num_set_val(retv, acos(num_val(&v))); + if(retv) { + DOUBLE x = num_val(&v); + if(x < -1.0 || x > 1.0) + num_set_nan(retv); + else + num_set_val(retv, acos(x)); + } return S_OK; } @@ -121,7 +127,13 @@ static HRESULT Math_asin(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPAR if(FAILED(hres)) return hres; - if(retv) num_set_val(retv, asin(num_val(&v))); + if(retv) { + DOUBLE x = num_val(&v); + if(x < -1.0 || x > 1.0) + num_set_nan(retv); + else + num_set_val(retv, asin(x)); + } return S_OK; } @@ -278,8 +290,13 @@ static HRESULT Math_log(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DISPPARA if(FAILED(hres)) return hres; - if(retv) - num_set_val(retv, log(num_val(&v))); + if(retv) { + DOUBLE x = num_val(&v); + if(x < -0.0) + num_set_nan(retv); + else + num_set_val(retv, log(x)); + } return S_OK; }