rekka/meval-rs

Found a panic case

NEUZhangy opened this issue · 0 comments

Please check below for the panic case and the stack trace:

Code:

#[test]
fn test_eval_str() {
    let v = vec![10,10,13,10,13,9,10,10,9,9];
    let mut s = String::new();
    for x in v.iter() {
        s.push(std::char::from_u32(*x).unwrap());
    }
    println!("{:?}", s);
    let _ = eval_str(s);

}
running 1 test
"\n\n\r\n\r\t\n\n\t\t"
thread 'expr::replay_fuzz' panicked at 'Unexpected parse result when parsing `




                ` at `




                `: Incomplete(Size(11))', src/tokenizer.rs:330:17
stack backtrace:
   0: std::backtrace_rs::backtrace::libunwind::trace
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/../../backtrace/src/backtrace/libunwind.rs:96
   1: std::backtrace_rs::backtrace::trace_unsynchronized
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/../../backtrace/src/backtrace/mod.rs:66
   2: std::sys_common::backtrace::_print_fmt
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/sys_common/backtrace.rs:77
   3: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/sys_common/backtrace.rs:58
   4: core::fmt::write
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/core/src/fmt/mod.rs:1117
   5: std::io::Write::write_fmt
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/io/mod.rs:1510
   6: std::sys_common::backtrace::_print
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/sys_common/backtrace.rs:61
   7: std::sys_common::backtrace::print
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/sys_common/backtrace.rs:48
   8: std::panicking::default_hook::{{closure}}
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:198
   9: std::panicking::default_hook
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:217
  10: std::panicking::rust_panic_with_hook
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:526
  11: rust_begin_unwind
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:437
  12: std::panicking::begin_panic_fmt
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:391
  13: meval::tokenizer::tokenize
             at ./src/tokenizer.rs:330
  14: <meval::expr::Expr as core::str::FromStr>::from_str
             at ./src/expr.rs:485
  15: meval::expr::eval_str
             at ./src/expr.rs:476
  16: meval::expr::replay_fuzz
             at ./src/expr.rs:471
  17: meval::expr::replay_fuzz::{{closure}}
             at ./src/expr.rs:464
  18: core::ops::function::FnOnce::call_once
             at /home/ying/.rustup/toolchains/nightly-2020-08-03-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core/src/ops/function.rs:233
  19: <alloc::boxed::Box<F> as core::ops::function::FnOnce<A>>::call_once
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/alloc/src/boxed.rs:1030
  20: <std::panic::AssertUnwindSafe<F> as core::ops::function::FnOnce<()>>::call_once
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panic.rs:318
  21: std::panicking::try::do_call
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:348
  22: std::panicking::try
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panicking.rs:325
  23: std::panic::catch_unwind
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/std/src/panic.rs:394
  24: test::run_test_in_process
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/test/src/lib.rs:541
  25: test::run_test::run_test_inner::{{closure}}
             at /rustc/81e754c359c471f91263813c46c67955071716a7/library/test/src/lib.rs:450
note: Some details are omitted, run with `RUST_BACKTRACE=full` for a verbose backtrace.
test expr::replay_fuzz ... FAILED

failures:

failures:
    expr::replay_fuzz

test result: FAILED. 0 passed; 1 failed; 0 ignored; 0 measured; 12 filtered out