Jacek Caban : jscript: Fixed deleting nonexistent identifiers.

Alexandre Julliard julliard at winehq.org
Mon Dec 17 13:58:23 CST 2012


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

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Mon Dec 17 13:36:18 2012 +0100

jscript: Fixed deleting nonexistent identifiers.

---

 dlls/jscript/engine.c      |   16 +++++++++++-----
 dlls/jscript/tests/lang.js |    1 +
 2 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/dlls/jscript/engine.c b/dlls/jscript/engine.c
index fbfa460..489aef6 100644
--- a/dlls/jscript/engine.c
+++ b/dlls/jscript/engine.c
@@ -1631,16 +1631,22 @@ static HRESULT interp_delete_ident(exec_ctx_t *ctx)
     if(FAILED(hres))
         return hres;
 
-    if(exprval.type != EXPRVAL_IDREF) {
+    switch(exprval.type) {
+    case EXPRVAL_IDREF:
+        hres = disp_delete(exprval.u.idref.disp, exprval.u.idref.id, &ret);
+        IDispatch_Release(exprval.u.idref.disp);
+        if(FAILED(hres))
+            return ret;
+        break;
+    case EXPRVAL_INVALID:
+        ret = TRUE;
+        break;
+    default:
         FIXME("Unsupported exprval\n");
         exprval_release(&exprval);
         return E_NOTIMPL;
     }
 
-    hres = disp_delete(exprval.u.idref.disp, exprval.u.idref.id, &ret);
-    IDispatch_Release(exprval.u.idref.disp);
-    if(FAILED(hres))
-        return ret;
 
     return stack_push(ctx, jsval_bool(ret));
 }
diff --git a/dlls/jscript/tests/lang.js b/dlls/jscript/tests/lang.js
index f9c05bd..bac2deb 100644
--- a/dlls/jscript/tests/lang.js
+++ b/dlls/jscript/tests/lang.js
@@ -1123,6 +1123,7 @@ for(iter in tmp)
     ok(false, "tmp has prop " + iter);
 ok((delete tmp.test) === true, "deleting test didn't return true");
 ok((delete tmp.nonexistent) === true, "deleting nonexistent didn't return true");
+ok((delete nonexistent) === true, "deleting nonexistent didn't return true");
 
 tmp = new Object();
 tmp.test = false;




More information about the wine-cvs mailing list