databend
databend copied to clipboard
bug: error: Undefined Behavior: out-of-bounds pointer arithmetic: alloc83513 has size 2, so pointer to 8 bytes starting at offset 1 is out-of-bounds
Summary
MIRI test:
MIRIFLAGS="-Zmiri-disable-isolation" cargo miri test
running 8 tests
test parser::test_expr ...
error: Undefined Behavior: out-of-bounds pointer arithmetic: alloc83513 has size 2, so pointer to 8 bytes starting at offset 1 is out-of-bounds
--> /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/common.rs:78:18
|
78 | unsafe { self.ptr.add(n) <= self.end }
| ^^^^^^^^^^^^^^^ out-of-bounds pointer arithmetic: alloc83513 has size 2, so pointer to 8 bytes starting at offset 1 is out-of-bounds
|
= help: this indicates a bug in the program: it performed an invalid operation, and caused Undefined Behavior
= help: see https://doc.rust-lang.org/nightly/reference/behavior-considered-undefined.html for further information
= note: BACKTRACE:
= note: inside `fast_float::common::AsciiStr::<'_>::check_len` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/common.rs:78:18
= note: inside `fast_float::common::AsciiStr::<'_>::try_read_u64` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/common.rs:83:12
= note: inside `fast_float::number::try_parse_8digits_le` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/number.rs:74:26
= note: inside `fast_float::number::parse_number` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/number.rs:153:9
= note: inside `fast_float::parse::parse_float::<f64>` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/parse.rs:14:29
= note: inside `<f64 as fast_float::FastFloat>::parse_float_partial::<&[u8]>` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/lib.rs:106:9
= note: inside `<f64 as fast_float::FastFloat>::parse_float::<&str>` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/lib.rs:89:15
= note: inside `fast_float::parse::<f64, &str>` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/fast-float-0.2.0/src/lib.rs:121:5
note: inside closure at /root/github/databend/src/query/ast/src/parser/expr.rs:1021:20
--> /root/github/databend/src/query/ast/src/parser/expr.rs:1021:20
|
1021 | |token| Ok(fast_float::parse(token.text())?),
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
note: inside closure at /root/github/databend/src/query/ast/src/util.rs:348:15
--> /root/github/databend/src/query/ast/src/util.rs:348:15
|
348 | match f(o1) {
| ^^^^^
note: inside `common_ast::parser::expr::literal_f64` at /root/github/databend/src/query/ast/src/parser/expr.rs:1017:5
--> /root/github/databend/src/query/ast/src/parser/expr.rs:1017:5
|
1017 | / map_res(
1018 | | rule! {
1019 | | LiteralFloat
1020 | | },
1021 | | |token| Ok(fast_float::parse(token.text())?),
1022 | | )(i)
| |________^
= note: inside `<for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, f64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_f64} as std::ops::FnMut<(common_ast::Input<'_>,)>>::call_mut - shim(for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, f64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_f64})` at /root/.rustup/toolchains/nightly-2022-11-14-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:339:5
= note: inside `<for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, f64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_f64} as nom::Parser<common_ast::Input<'_>, f64, common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/internal.rs:325:5
= note: inside closure at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/combinator/mod.rs:79:23
= note: inside `<[closure@nom::combinator::map<common_ast::Input<'_>, f64, common_ast::ast::Literal, common_ast::Error<'_>, for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, f64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_f64}, fn(f64) -> common_ast::ast::Literal {common_ast::ast::Literal::Float}>::{closure#0}] as nom::Parser<common_ast::Input<'_>, common_ast::ast::Literal, common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/internal.rs:325:5
= note: inside `<([closure@nom::combinator::map<common_ast::Input<'_>, std::string::String, common_ast::ast::Literal, common_ast::Error<'_>, for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, std::string::String), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_string}, fn(std::string::String) -> common_ast::ast::Literal {common_ast::ast::Literal::String}>::{closure#0}], [closure@nom::combinator::map<common_ast::Input<'_>, u64, common_ast::ast::Literal, common_ast::Error<'_>, for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, u64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_u64}, fn(u64) -> common_ast::ast::Literal {common_ast::ast::Literal::Integer}>::{closure#0}], [closure@nom::combinator::map<common_ast::Input<'_>, f64, common_ast::ast::Literal, common_ast::Error<'_>, for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, f64), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_f64}, fn(f64) -> common_ast::ast::Literal {common_ast::ast::Literal::Float}>::{closure#0}], [closure@nom::combinator::map<common_ast::Input<'_>, &common_ast::parser::token::Token<'_>, common_ast::ast::Literal, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}], [closure@common_ast::parser::expr::literal::{closure#0}]>::{closure#0}], [closure@nom::combinator::map<common_ast::Input<'_>, &str, common_ast::ast::Literal, common_ast::Error<'_>, for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, &'a str), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::literal_hex_str}, [closure@common_ast::parser::expr::literal::{closure#1}]>::{closure#0}], [closure@nom::branch::alt<common_ast::Input<'_>, common_ast::ast::Literal, common_ast::Error<'_>, ([closure@nom::combinator::value<common_ast::Input<'_>, common_ast::ast::Literal, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}], [closure@nom::combinator::value<common_ast::Input<'_>, common_ast::ast::Literal, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}])>::{closure#0}], [closure@nom::combinator::value<common_ast::Input<'_>, common_ast::ast::Literal, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}], [closure@nom::combinator::value<common_ast::Input<'_>, common_ast::ast::Literal, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}]) as nom::branch::Alt<common_ast::Input<'_>, common_ast::ast::Literal, common_ast::Error<'_>>>::choice` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/branch/mod.rs:170:11
= note: inside closure at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/branch/mod.rs:74:15
note: inside `common_ast::parser::expr::literal` at /root/github/databend/src/query/ast/src/parser/expr.rs:966:5
--> /root/github/databend/src/query/ast/src/parser/expr.rs:966:5
|
966 | / rule!(
967 | | #string
968 | | | #integer
969 | | | #float
... |
974 | | | #null
975 | | )(i)
| |________^
note: inside closure at /root/github/databend/src/query/ast/src/parser/expr.rs:129:34
--> /root/github/databend/src/query/ast/src/parser/expr.rs:129:34
|
129 | ... lit: literal(span)?.1,
| ^^^^^^^^^^^^^
= note: inside `<[closure@common_ast::parser::expr::subexpr::{closure#0}] as nom::Parser<common_ast::Input<'_>, common_ast::ast::Expr<'_>, common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/internal.rs:325:5
= note: inside closure at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/error.rs:240:21
note: inside `common_ast::parser::expr::expr` at /root/github/databend/src/query/ast/src/parser/expr.rs:42:5
--> /root/github/databend/src/query/ast/src/parser/expr.rs:42:5
|
42 | context("expression", subexpr(0))(i)
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
= note: inside `<for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, common_ast::ast::Expr<'a>), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::expr} as std::ops::FnMut<(common_ast::Input<'_>,)>>::call_mut - shim(for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, common_ast::ast::Expr<'a>), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::expr})` at /root/.rustup/toolchains/nightly-2022-11-14-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:339:5
= note: inside `<for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, common_ast::ast::Expr<'a>), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::expr} as nom::Parser<common_ast::Input<'_>, common_ast::ast::Expr<'_>, common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/internal.rs:325:5
= note: inside `<(for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, common_ast::ast::Expr<'a>), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::expr}, [closure@nom::combinator::peek<common_ast::Input<'_>, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}]) as nom::sequence::Tuple<common_ast::Input<'_>, (common_ast::ast::Expr<'_>, &common_ast::parser::token::Token<'_>), common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/sequence/mod.rs:236:18
= note: inside closure at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/sequence/mod.rs:269:15
= note: inside `<[closure@nom::sequence::tuple<common_ast::Input<'_>, (common_ast::ast::Expr<'_>, &common_ast::parser::token::Token<'_>), common_ast::Error<'_>, (for<'a> fn(common_ast::Input<'a>) -> std::result::Result<(common_ast::Input<'a>, common_ast::ast::Expr<'a>), nom::Err<common_ast::Error<'a>>> {common_ast::parser::expr::expr}, [closure@nom::combinator::peek<common_ast::Input<'_>, &common_ast::parser::token::Token<'_>, common_ast::Error<'_>, [closure@common_ast::match_token::{closure#0}]>::{closure#0}])>::{closure#0}] as nom::Parser<common_ast::Input<'_>, (common_ast::ast::Expr<'_>, &common_ast::parser::token::Token<'_>), common_ast::Error<'_>>>::parse` at /root/.cargo/registry/src/github.com-1ecc6299db9ec823/nom-7.1.1/src/internal.rs:325:5
note: inside `parser::test_expr` at src/query/ast/tests/it/parser.rs:37:15
--> src/query/ast/tests/it/parser.rs:37:15
|
37 | match parser.parse(Input(&tokens, Dialect::PostgreSQL, &backtrace)) {
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
...
557 | run_parser!(file, expr, case);
| ----------------------------- in this macro invocation
note: inside closure at src/query/ast/tests/it/parser.rs:485:16
--> src/query/ast/tests/it/parser.rs:485:16
cc @andylokandy