Merge 'Fuzz fix some operations' from Pedro Muniz

Me and @diegoreis42 were late at night, running the new fuzzer and saw
some errors with `Bit-Not` and `Not` operations. Added some tests as
well for those fixes.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1328
This commit is contained in:
Jussi Saurio
2025-04-13 17:02:19 +03:00
3 changed files with 55 additions and 204 deletions

View File

@@ -5606,8 +5606,11 @@ pub fn exec_bit_not(reg: &OwnedValue) -> OwnedValue {
OwnedValue::Null => OwnedValue::Null,
OwnedValue::Integer(i) => OwnedValue::Integer(!i),
OwnedValue::Float(f) => OwnedValue::Integer(!(*f as i64)),
OwnedValue::Text(text) => exec_bit_not(&cast_text_to_numeric(text.as_str())),
_ => todo!(),
OwnedValue::Text(text) => exec_bit_not(&cast_text_to_integer(text.as_str())),
OwnedValue::Blob(blob) => {
let text = String::from_utf8_lossy(blob);
exec_bit_not(&cast_text_to_integer(&text))
}
}
}
@@ -5724,8 +5727,11 @@ pub fn exec_boolean_not(reg: &OwnedValue) -> OwnedValue {
OwnedValue::Null => OwnedValue::Null,
OwnedValue::Integer(i) => OwnedValue::Integer((*i == 0) as i64),
OwnedValue::Float(f) => OwnedValue::Integer((*f == 0.0) as i64),
OwnedValue::Text(text) => exec_boolean_not(&cast_text_to_numeric(text.as_str())),
_ => todo!(),
OwnedValue::Text(text) => exec_boolean_not(&&cast_text_to_real(text.as_str())),
OwnedValue::Blob(blob) => {
let text = String::from_utf8_lossy(blob);
exec_boolean_not(&cast_text_to_real(&text))
}
}
}
pub fn exec_concat(lhs: &OwnedValue, rhs: &OwnedValue) -> OwnedValue {

213
fuzz/Cargo.lock generated
View File

@@ -47,15 +47,6 @@ version = "2.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5c8214115b7bf84099f1309324e63141d4c5d7cc26862f97a0a857dbefe165bd"
[[package]]
name = "block-buffer"
version = "0.10.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
dependencies = [
"generic-array",
]
[[package]]
name = "built"
version = "0.7.7"
@@ -72,12 +63,6 @@ version = "3.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1628fb46dfa0b37568d12e5edd512553eccf6a22a78e8bde00bb4aed84d5bdbf"
[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cc"
version = "1.2.16"
@@ -130,15 +115,6 @@ version = "0.8.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
[[package]]
name = "cpufeatures"
version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280"
dependencies = [
"libc",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.18"
@@ -164,16 +140,6 @@ version = "0.8.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28"
[[package]]
name = "crypto-common"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
dependencies = [
"generic-array",
"typenum",
]
[[package]]
name = "derive_arbitrary"
version = "1.4.1"
@@ -185,16 +151,6 @@ dependencies = [
"syn",
]
[[package]]
name = "digest"
version = "0.10.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
dependencies = [
"block-buffer",
"crypto-common",
]
[[package]]
name = "displaydoc"
version = "0.2.5"
@@ -234,12 +190,6 @@ version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7360491ce676a36bf9bb3c56c1aa791658183a54d2744120f27285738d90465a"
[[package]]
name = "fast-float2"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8eb564c5c7423d25c886fb561d1e4ee69f72354d16918afa32c08811f6b6a55"
[[package]]
name = "foldhash"
version = "0.1.4"
@@ -255,16 +205,6 @@ dependencies = [
"percent-encoding",
]
[[package]]
name = "generic-array"
version = "0.14.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
dependencies = [
"typenum",
"version_check",
]
[[package]]
name = "getrandom"
version = "0.2.15"
@@ -507,15 +447,8 @@ checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
dependencies = [
"equivalent",
"hashbrown",
"serde",
]
[[package]]
name = "itoa"
version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
[[package]]
name = "jobserver"
version = "0.1.32"
@@ -535,22 +468,6 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "jsonb"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acd7dc2490b13d09367f5dc4bf202a5d70958dd5b9b2758e2708ee062752a824"
dependencies = [
"byteorder",
"fast-float2",
"itoa",
"nom",
"ordered-float",
"rand",
"ryu",
"serde_json",
]
[[package]]
name = "julian_day_converter"
version = "0.4.4"
@@ -598,6 +515,12 @@ dependencies = [
"windows-targets",
]
[[package]]
name = "libm"
version = "0.2.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa"
[[package]]
name = "libmimalloc-sys"
version = "0.1.39"
@@ -643,7 +566,7 @@ dependencies = [
[[package]]
name = "limbo_core"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"built",
"cfg_block",
@@ -652,10 +575,9 @@ dependencies = [
"fallible-iterator",
"getrandom 0.2.15",
"hex",
"indexmap",
"jsonb",
"julian_day_converter",
"libloading",
"libm",
"limbo_ext",
"limbo_macros",
"limbo_sqlite3_parser",
@@ -664,15 +586,12 @@ dependencies = [
"miette",
"mimalloc",
"parking_lot",
"pest",
"pest_derive",
"polling",
"rand",
"regex",
"regex-syntax",
"rustix",
"ryu",
"serde",
"strum",
"thiserror 1.0.69",
"tracing",
@@ -680,7 +599,7 @@ dependencies = [
[[package]]
name = "limbo_ext"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"chrono",
"getrandom 0.3.1",
@@ -689,7 +608,7 @@ dependencies = [
[[package]]
name = "limbo_macros"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"proc-macro2",
"quote",
@@ -698,7 +617,7 @@ dependencies = [
[[package]]
name = "limbo_sqlite3_parser"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"bitflags",
"cc",
@@ -717,7 +636,7 @@ dependencies = [
[[package]]
name = "limbo_time"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"chrono",
"limbo_ext",
@@ -729,7 +648,7 @@ dependencies = [
[[package]]
name = "limbo_uuid"
version = "0.0.18-pre.3"
version = "0.0.19-pre.4"
dependencies = [
"limbo_ext",
"mimalloc",
@@ -802,22 +721,6 @@ dependencies = [
"libmimalloc-sys",
]
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "num-traits"
version = "0.2.19"
@@ -833,15 +736,6 @@ version = "1.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cde51589ab56b20a6f686b2c68f7a0bd6add753d697abf720d63f8db3ab7b1ad"
[[package]]
name = "ordered-float"
version = "4.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951"
dependencies = [
"num-traits",
]
[[package]]
name = "parking_lot"
version = "0.12.3"
@@ -871,51 +765,6 @@ version = "2.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
[[package]]
name = "pest"
version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc"
dependencies = [
"memchr",
"thiserror 2.0.12",
"ucd-trie",
]
[[package]]
name = "pest_derive"
version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e"
dependencies = [
"pest",
"pest_generator",
]
[[package]]
name = "pest_generator"
version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b"
dependencies = [
"pest",
"pest_meta",
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "pest_meta"
version = "2.7.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea"
dependencies = [
"once_cell",
"pest",
"sha2",
]
[[package]]
name = "phf"
version = "0.11.3"
@@ -1142,30 +991,6 @@ dependencies = [
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.140"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373"
dependencies = [
"indexmap",
"itoa",
"memchr",
"ryu",
"serde",
]
[[package]]
name = "sha2"
version = "0.10.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8"
dependencies = [
"cfg-if",
"cpufeatures",
"digest",
]
[[package]]
name = "shlex"
version = "1.3.0"
@@ -1315,18 +1140,6 @@ dependencies = [
"once_cell",
]
[[package]]
name = "typenum"
version = "1.18.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1dccffe3ce07af9386bfd29e80c0ab1a8205a2fc34e4bcd40364df902cfa8f3f"
[[package]]
name = "ucd-trie"
version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971"
[[package]]
name = "uncased"
version = "0.9.10"

View File

@@ -627,6 +627,38 @@ do_execsql_test bitwise-not-zero {
SELECT ~0
} {-1}
do_execsql_test bitwise-not-empty-blob {
SELECT ~x''
} {-1}
do_execsql_test bitwise-not-cast-blob {
SELECT ~ CAST ('af' AS BLOB);
} {-1}
do_execsql_test bitwise-not-blob {
SELECT ~ x'0000';
} {-1}
do_execsql_test bitwise-not-blob-2 {
SELECT ~ x'0001';
} {-1}
do_execsql_test boolean-not-empty-blob {
SELECT NOT x''
} {1}
do_execsql_test boolean-not-cast-blob {
SELECT NOT CAST ('af' AS BLOB);
} {1}
do_execsql_test boolean-not-blob {
SELECT NOT x'0000';
} {1}
do_execsql_test boolean-not-blob-2 {
SELECT NOT x'0001';
} {1}
foreach {testname lhs ans} {
int-1 1 0
int-2 2 0