diff --git a/Cargo.lock b/Cargo.lock index c075418d..32d37e58 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -607,7 +607,7 @@ checksum = "89d92a4743f9a61002fae18374ed11e7973f530cb3a3255fb354818118b2203c" [[package]] name = "libsky" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" [[package]] name = "linux-raw-sys" @@ -1165,7 +1165,7 @@ dependencies = [ [[package]] name = "sky-bench" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" dependencies = [ "crossbeam-channel", "env_logger", @@ -1178,7 +1178,7 @@ dependencies = [ [[package]] name = "sky_macros" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" dependencies = [ "libsky", "proc-macro2", @@ -1188,7 +1188,7 @@ dependencies = [ [[package]] name = "skyd" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" dependencies = [ "bytes", "crc", @@ -1214,7 +1214,7 @@ dependencies = [ [[package]] name = "skysh" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" dependencies = [ "crossterm", "libsky", diff --git a/cli/Cargo.toml b/cli/Cargo.toml index eb12cb7f..54aaa604 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "skysh" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" authors = ["Sayan Nandan "] edition = "2021" description = "The Skytable Shell (skysh)" diff --git a/cli/help_text/help b/cli/help_text/help index 2ba1abe5..736b376c 100644 --- a/cli/help_text/help +++ b/cli/help_text/help @@ -1,4 +1,4 @@ -skysh 0.8.0-beta.3 +skysh 0.8.0-beta.4 Sayan N. The Skytable interactive shell (skysh) diff --git a/libsky/Cargo.toml b/libsky/Cargo.toml index 9343ef9a..df829511 100644 --- a/libsky/Cargo.toml +++ b/libsky/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Sayan Nandan "] edition = "2021" name = "libsky" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/server/Cargo.toml b/server/Cargo.toml index 4c01b8c2..b4668d93 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Sayan Nandan "] edition = "2021" name = "skyd" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" description = "Skytable is a modern NoSQL database powered by BlueQL that aims to deliver performance, scalability and flexibility with data" license = "AGPL-3.0" diff --git a/server/src/engine/ql/lex/mod.rs b/server/src/engine/ql/lex/mod.rs index c4dac3aa..f44a297f 100644 --- a/server/src/engine/ql/lex/mod.rs +++ b/server/src/engine/ql/lex/mod.rs @@ -371,7 +371,7 @@ impl<'a> SecureLexer<'a> { }; match b { b if b.is_ascii_alphabetic() | (b == b'_') => self.l.scan_ident_or_keyword(), - b'?' => { + b'?' if !self.param_buffer.eof() => { // skip the param byte unsafe { // UNSAFE(@ohsayan): loop invariant diff --git a/server/src/engine/ql/tests/lexer_tests.rs b/server/src/engine/ql/tests/lexer_tests.rs index e1aeec6e..8446cf15 100644 --- a/server/src/engine/ql/tests/lexer_tests.rs +++ b/server/src/engine/ql/tests/lexer_tests.rs @@ -182,6 +182,43 @@ fn make_safe_query(a: &[u8], b: &[u8]) -> (Vec, usize) { (s, a.len()) } +#[test] +fn safe_query_param_empty() { + for i in 0..100 { + let (query, query_window) = make_safe_query(&b"?".repeat(i), b""); + let ret = lex_secure(&query, query_window).unwrap(); + assert_eq!( + ret, + (0..i).map(|_| Token![?]).collect::>>() + ); + } +} + +#[test] +fn safe_query_less_param() { + for i in 1..=10 { + /* + test placeholder combinations: + - 1PH 1P + - 2PH 1P, 2PH 2P + - 3PH 1P, 3PH 2P, 3PH 3P + */ + for j in 1..=i { + let (query, query_window) = + make_safe_query(&b"?".repeat(i), &b"\x065\nsayan".repeat(j)); + let ret = lex_secure(&query, query_window).unwrap(); + // check + let exp_params = (0..j) + .map(|_| Token::Lit(Lit::new_str("sayan"))) + .collect::>>(); + let exp_placeholders = (0..i - j) + .map(|_| Token![?]) + .collect::>>(); + assert_eq!(ret, [exp_params, exp_placeholders].concat()); + } + } +} + #[test] fn safe_query_all_literals() { let (query, query_window) = make_safe_query( diff --git a/sky-bench/Cargo.toml b/sky-bench/Cargo.toml index 7e73c813..fba43b36 100644 --- a/sky-bench/Cargo.toml +++ b/sky-bench/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Sayan Nandan "] edition = "2021" name = "sky-bench" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" description = "The Skytable benchmark tool can be used to benchmark Skytable installations" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/sky-bench/help_text/help b/sky-bench/help_text/help index a4375b10..5c1ed876 100644 --- a/sky-bench/help_text/help +++ b/sky-bench/help_text/help @@ -1,4 +1,4 @@ -sky-bench 0.8.0-beta.3 +sky-bench 0.8.0-beta.4 Sayan N. Skytable benchmark tool diff --git a/sky-macros/Cargo.toml b/sky-macros/Cargo.toml index 3ea1663d..067d3817 100644 --- a/sky-macros/Cargo.toml +++ b/sky-macros/Cargo.toml @@ -2,7 +2,7 @@ authors = ["Sayan Nandan "] edition = "2021" name = "sky_macros" -version = "0.8.0-beta.3" +version = "0.8.0-beta.4" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html