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