Jacek Caban : jscript: Better handling of to_integer in String.substr.
Alexandre Julliard
julliard at winehq.org
Thu May 3 14:23:49 CDT 2012
Module: wine
Branch: master
Commit: e26a3018e775715f360ee951164bc9418f71d299
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e26a3018e775715f360ee951164bc9418f71d299
Author: Jacek Caban <jacek at codeweavers.com>
Date: Thu May 3 10:41:36 2012 +0200
jscript: Better handling of to_integer in String.substr.
---
dlls/jscript/string.c | 27 +++++++++------------------
1 files changed, 9 insertions(+), 18 deletions(-)
diff --git a/dlls/jscript/string.c b/dlls/jscript/string.c
index 3b7e700..9e2fcb2 100644
--- a/dlls/jscript/string.c
+++ b/dlls/jscript/string.c
@@ -1366,6 +1366,7 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS
INT start=0, len;
DWORD length;
VARIANT v;
+ double d;
HRESULT hres;
TRACE("\n");
@@ -1381,15 +1382,9 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS
return hres;
}
- if(V_VT(&v) == VT_I4) {
- start = V_I4(&v);
- if(start < 0)
- start = 0;
- else if(start >= length)
- start = length;
- }else {
- start = V_R8(&v) < 0.0 ? 0 : length;
- }
+ d = num_val(&v);
+ if(d >= 0)
+ start = is_int32(d) ? min(length, d) : length;
}
if(arg_cnt(dp) >= 2) {
@@ -1399,15 +1394,11 @@ static HRESULT String_substr(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags, DIS
return hres;
}
- if(V_VT(&v) == VT_I4) {
- len = V_I4(&v);
- if(len < 0)
- len = 0;
- else if(len > length-start)
- len = length-start;
- }else {
- len = V_R8(&v) < 0.0 ? 0 : length-start;
- }
+ d = num_val(&v);
+ if(d >= 0.0)
+ len = is_int32(d) ? min(length-start, d) : length-start;
+ else
+ len = 0;
}else {
len = length-start;
}
More information about the wine-cvs
mailing list