From 3ab3970c0155cbb3d042690fea81a040081d3e46 Mon Sep 17 00:00:00 2001 From: kyren Date: Fri, 23 Jun 2017 00:51:16 -0400 Subject: [PATCH] ACTUALLY correctly limit numeric conversions Don't mistakenly do rust-side conversions from integer <-> number --- src/lua.rs | 2 -- src/tests.rs | 24 ++++++++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/lua.rs b/src/lua.rs index d653c8f..c776cfb 100644 --- a/src/lua.rs +++ b/src/lua.rs @@ -1238,7 +1238,6 @@ impl Lua { pub fn coerce_integer(&self, v: LuaValue) -> LuaResult { match v { LuaValue::Integer(i) => Ok(i), - LuaValue::Number(n) => Ok(n as LuaInteger), v => unsafe { stack_guard(self.state, 0, || { check_stack(self.state, 1)?; @@ -1262,7 +1261,6 @@ impl Lua { /// manual for details. pub fn coerce_number(&self, v: LuaValue) -> LuaResult { match v { - LuaValue::Integer(i) => Ok(i as LuaNumber), LuaValue::Number(n) => Ok(n), v => unsafe { stack_guard(self.state, 0, || { diff --git a/src/tests.rs b/src/tests.rs index bb6c629..5be684a 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -730,13 +730,21 @@ fn test_num_conversion() { let lua = Lua::new(); let globals = lua.globals().unwrap(); - globals.set("a", "1.0").unwrap(); - assert_eq!(globals.get::<_, i64>("a").unwrap(), 1); - assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.0); - assert_eq!(globals.get::<_, String>("a").unwrap(), "1.0"); + globals.set("n", "1.0").unwrap(); + assert_eq!(globals.get::<_, i64>("n").unwrap(), 1); + assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.0); + assert_eq!(globals.get::<_, String>("n").unwrap(), "1.0"); - globals.set("a", "1.5").unwrap(); - assert!(globals.get::<_, i64>("a").is_err()); - assert_eq!(globals.get::<_, f64>("a").unwrap(), 1.5); - assert_eq!(globals.get::<_, String>("a").unwrap(), "1.5"); + globals.set("n", "1.5").unwrap(); + assert!(globals.get::<_, i64>("n").is_err()); + assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.5); + assert_eq!(globals.get::<_, String>("n").unwrap(), "1.5"); + + globals.set("n", 1.5).unwrap(); + assert!(globals.get::<_, i64>("n").is_err()); + assert_eq!(globals.get::<_, f64>("n").unwrap(), 1.5); + assert_eq!(globals.get::<_, String>("n").unwrap(), "1.5"); + + lua.exec::<()>("a = math.huge", None).unwrap(); + assert!(globals.get::<_, i64>("n").is_err()); }