From 73ad0bc608622c79083edd32307b6847e106d704 Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sat, 16 Sep 2017 13:50:12 +0200 Subject: [PATCH 1/2] Use compiletest to make sure unsafe things do not compile --- Cargo.toml | 1 + src/tests.rs | 25 ------------------------- tests/compile-fail.rs | 18 ++++++++++++++++++ tests/compile-fail/self-borrow.rs | 13 +++++++++++++ tests/compile-fail/userdata-borrow.rs | 20 ++++++++++++++++++++ 5 files changed, 52 insertions(+), 25 deletions(-) create mode 100644 tests/compile-fail.rs create mode 100644 tests/compile-fail/self-borrow.rs create mode 100644 tests/compile-fail/userdata-borrow.rs diff --git a/Cargo.toml b/Cargo.toml index 2a242522..3fb22889 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,3 +29,4 @@ gcc = { version = "0.3.52", optional = true } [dev-dependencies] rustyline = "1.0.0" +compiletest_rs = "0.3.0" diff --git a/src/tests.rs b/src/tests.rs index c3d13215..f9084a7b 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -982,28 +982,3 @@ fn test_metatable() { _ => panic!(), }; } - -// Need to use compiletest-rs or similar to make sure these don't compile. -/* -#[test] -fn should_not_compile() { - let lua = Lua::new(); - let globals = lua.globals(); - - // Should not allow userdata borrow to outlive lifetime of AnyUserData handle - struct MyUserData; - impl UserData for MyUserData {}; - let userdata_ref; - { - let touter = globals.get::<_, Table>("touter").unwrap(); - touter.set("userdata", lua.create_userdata(MyUserData)).unwrap(); - let userdata = touter.get::<_, AnyUserData>("userdata").unwrap(); - userdata_ref = userdata.borrow::(); - } - - // Should not allow self borrow of lua, it can change addresses - globals.set("boom", lua.create_function(|_, _| { - lua.eval::("1 + 1", None) - })).unwrap(); -} -*/ diff --git a/tests/compile-fail.rs b/tests/compile-fail.rs new file mode 100644 index 00000000..506e27a1 --- /dev/null +++ b/tests/compile-fail.rs @@ -0,0 +1,18 @@ +extern crate compiletest_rs as compiletest; + +use std::path::PathBuf; + +fn run_mode(mode: &'static str) { + let mut config = compiletest::Config::default(); + + config.mode = mode.parse().expect("Invalid mode"); + config.src_base = PathBuf::from(format!("tests/{}", mode)); + config.target_rustcflags = Some("-L target/debug -L target/debug/deps".to_string()); + + compiletest::run_tests(&config); +} + +#[test] +fn compile_test() { + run_mode("compile-fail"); +} diff --git a/tests/compile-fail/self-borrow.rs b/tests/compile-fail/self-borrow.rs new file mode 100644 index 00000000..2f0ee0f6 --- /dev/null +++ b/tests/compile-fail/self-borrow.rs @@ -0,0 +1,13 @@ +extern crate rlua; + +use rlua::*; + +fn main() { + let lua = Lua::new(); + + // Should not allow self borrow of lua, it can change addresses + let func = lua.create_function(|_, ()| -> Result { + //~^ error: closure may outlive the current function, but it borrows `lua`, which is owned by the current function + lua.eval::("1 + 1", None) + }); +} diff --git a/tests/compile-fail/userdata-borrow.rs b/tests/compile-fail/userdata-borrow.rs new file mode 100644 index 00000000..d14d8acf --- /dev/null +++ b/tests/compile-fail/userdata-borrow.rs @@ -0,0 +1,20 @@ +extern crate rlua; + +use rlua::*; + +fn main() { + let lua = Lua::new(); + let globals = lua.globals(); + + // Should not allow userdata borrow to outlive lifetime of AnyUserData handle + struct MyUserData; + impl UserData for MyUserData {}; + let userdata_ref; + { + let touter = globals.get::<_, Table>("touter").unwrap(); + touter.set("userdata", lua.create_userdata(MyUserData)).unwrap(); + let userdata = touter.get::<_, AnyUserData>("userdata").unwrap(); + userdata_ref = userdata.borrow::(); + } + //~^ error: `userdata` does not live long enough +} From 4c0a366006b7971db7a7b3fcb9848567df342d9b Mon Sep 17 00:00:00 2001 From: Jonas Schievink Date: Sat, 16 Sep 2017 14:26:53 +0200 Subject: [PATCH 2/2] Try to fix Travis --- .travis.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index ad49a0e5..d8202afc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,10 +1,12 @@ language: rust -rust: - - stable - - beta - - nightly env: - RUSTFLAGS="-D warnings" matrix: + include: + - rust: stable + script: cargo test --lib -v + - rust: beta + script: cargo test --lib -v + - rust: nightly allow_failures: - rust: nightly