From 7d3b58d631e1592d94c8a8b0f336a109801a5ad4 Mon Sep 17 00:00:00 2001 From: James Roseborough Date: Tue, 4 May 2010 23:48:59 +0000 Subject: [PATCH] Reject nan as table index. --- src/core/org/luaj/vm2/LuaDouble.java | 5 +++++ src/core/org/luaj/vm2/LuaNil.java | 4 ++++ src/core/org/luaj/vm2/LuaTable.java | 2 +- src/core/org/luaj/vm2/LuaValue.java | 2 ++ 4 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/core/org/luaj/vm2/LuaDouble.java b/src/core/org/luaj/vm2/LuaDouble.java index 2e5c148e..dcca2f24 100644 --- a/src/core/org/luaj/vm2/LuaDouble.java +++ b/src/core/org/luaj/vm2/LuaDouble.java @@ -192,4 +192,9 @@ public class LuaDouble extends LuaNumber { return LuaString.valueOf(tojstring()); } + public LuaValue checkvalidkey() { + if ( Double.isNaN(v) ) + throw new LuaError("table index expected, got nan"); + return this; + } } diff --git a/src/core/org/luaj/vm2/LuaNil.java b/src/core/org/luaj/vm2/LuaNil.java index 4369dc7c..39722cad 100644 --- a/src/core/org/luaj/vm2/LuaNil.java +++ b/src/core/org/luaj/vm2/LuaNil.java @@ -62,6 +62,10 @@ public class LuaNil extends LuaValue { public LuaValue checknotnil() { return typerror("value"); } + + public LuaValue checkvalidkey() { + return typerror("table index"); + } // optional argument conversions - nil alwas falls badk to default value public boolean optboolean(boolean defval) { return defval; } diff --git a/src/core/org/luaj/vm2/LuaTable.java b/src/core/org/luaj/vm2/LuaTable.java index 0277504a..280eb1be 100644 --- a/src/core/org/luaj/vm2/LuaTable.java +++ b/src/core/org/luaj/vm2/LuaTable.java @@ -189,7 +189,7 @@ public class LuaTable extends LuaValue { /** caller must ensure key is not nil */ public void set( LuaValue key, LuaValue value ) { - key.checknotnil(); + key.checkvalidkey(); if ( m_metatable==null || ! rawget(key).isnil() || ! settable(this,key,value) ) rawset(key, value); } diff --git a/src/core/org/luaj/vm2/LuaValue.java b/src/core/org/luaj/vm2/LuaValue.java index 93d8a490..3e885c36 100644 --- a/src/core/org/luaj/vm2/LuaValue.java +++ b/src/core/org/luaj/vm2/LuaValue.java @@ -153,6 +153,8 @@ public class LuaValue extends Varargs { public Object checkuserdata() { typerror("userdata"); return null; } public Object checkuserdata(Class c) { typerror("userdata"); return null; } public LuaValue checknotnil() { return this; } + public LuaValue checkvalidkey() { return this; } + /** @deprecated - use checkjstring() instead */ public String checkString() { return checkjstring(); }