Jacek Caban : jscript: Better handling of to_integer result in String. substring.

Alexandre Julliard julliard at winehq.org
Thu May 3 14:23:49 CDT 2012


Module: wine
Branch: master
Commit: 9b02d2d5a3c83a8819e4e1b4a83a2c789dab9b27
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=9b02d2d5a3c83a8819e4e1b4a83a2c789dab9b27

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Thu May  3 10:41:23 2012 +0200

jscript: Better handling of to_integer result in String.substring.

---

 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 773e3a3..3b7e700 100644
--- a/dlls/jscript/string.c
+++ b/dlls/jscript/string.c
@@ -1302,6 +1302,7 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
     INT start=0, end;
     DWORD length;
     VARIANT v;
+    double d;
     HRESULT hres;
 
     TRACE("\n");
@@ -1317,15 +1318,9 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
             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((int)d, length) : length;
     }
 
     if(arg_cnt(dp) >= 2) {
@@ -1335,15 +1330,11 @@ static HRESULT String_substring(script_ctx_t *ctx, vdisp_t *jsthis, WORD flags,
             return hres;
         }
 
-        if(V_VT(&v) == VT_I4) {
-            end = V_I4(&v);
-            if(end < 0)
-                end = 0;
-            else if(end > length)
-                end = length;
-        }else {
-            end = V_R8(&v) < 0.0 ? 0 : length;
-        }
+        d = num_val(&v);
+        if(d >= 0)
+            end = is_int32(d) ? min((int)d, length) : length;
+        else
+            end = 0;
     }else {
         end = length;
     }




More information about the wine-cvs mailing list