GithubHelp home page GithubHelp logo

javaparser.rs's People

Contributors

tanin47 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

javaparser.rs's Issues

panicked at 'index out of bounds: the len is 0 but the index is 0'

Input: @A(

Code:

fn main(){
    // let d = input
    let _ = parse::apply(&d, "hello.java");
}

Output:

thread 'main' panicked at 'index out of bounds: the len is 0 but the index is 0', /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/atom/number.rs:6:32
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: core::panicking::panic_fmt
   8: core::panicking::panic_bounds_check
   9: javaparser::parse::expr::atom::number::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/atom/number.rs:6
  10: javaparser::parse::expr::atom::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/atom/mod.rs:26
  11: javaparser::parse::expr::precedence_16::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_16.rs:19
  12: javaparser::parse::expr::precedence_15::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_15.rs:109
  13: javaparser::parse::expr::precedence_14::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_14.rs:22
  14: javaparser::parse::expr::precedence_13::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_13/mod.rs:21
  15: javaparser::parse::expr::precedence_12::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_12.rs:44
  16: javaparser::parse::expr::precedence_11::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_11.rs:42
  17: javaparser::parse::expr::precedence_10::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_10.rs:44
  18: javaparser::parse::expr::precedence_9::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_9.rs:61
  19: javaparser::parse::expr::precedence_8::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_8.rs:42
  20: javaparser::parse::expr::precedence_7::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_7.rs:31
  21: javaparser::parse::expr::precedence_6::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_6.rs:31
  22: javaparser::parse::expr::precedence_5::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_5.rs:31
  23: javaparser::parse::expr::precedence_4::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_4.rs:31
  24: javaparser::parse::expr::precedence_3::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_3.rs:11
  25: javaparser::parse::expr::precedence_2::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_2.rs:11
  26: javaparser::parse::expr::precedence_1::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/precedence_1.rs:70
  27: javaparser::parse::expr::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/expr/mod.rs:46
  28: javaparser::parse::def::annotateds::parse_value
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/def/annotateds.rs:33
  29: javaparser::parse::def::annotateds::parse_annotated
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/def/annotateds.rs:103
  30: javaparser::parse::def::annotateds::parse::{{closure}}
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/def/annotateds.rs:115
  31: javaparser::parse::combinator::many0::{{closure}}
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/combinator.rs:327
  32: javaparser::parse::def::annotateds::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/def/annotateds.rs:115
  33: javaparser::parse::def::package::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/def/package.rs:11
  34: javaparser::parse::compilation_unit::parse::{{closure}}
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/compilation_unit.rs:35
  35: javaparser::parse::combinator::opt::{{closure}}
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/combinator.rs:235
  36: javaparser::parse::compilation_unit::parse
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/compilation_unit.rs:35
  37: javaparser::parse::apply_tokens
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:27
  38: javaparser::parse::apply
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:59

Expect:
properly return error instead of panic

heap-buffer-overflow

Input: 1e

Code:

fn main(){
    // let d = input
    let _ = parse::apply(&d, "hello.java");
}

Output:

=================================================================
==8557==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x602000000072 at pc 0x563dec452755 bp 0x7ffe141465d0 sp 0x7ffe141465c8
READ of size 1 at 0x602000000072 thread T0
    #0 0x563dec452754 in javaparser::tokenize::span::raw_char_at::ha1bcab0e81f33201 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/span.rs:22:14
    #1 0x563dec452585 in _$LT$str$u20$as$u20$javaparser..tokenize..span..CharAt$GT$::char_at::h8cdfe69ff14a0f4d /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/span.rs:17:9
    #2 0x563dec447738 in javaparser::tokenize::combinator::take_one_if_case_insensitive::h3ed540880ccea442 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/combinator.rs:70:19
    #3 0x563dec460c31 in javaparser::tokenize::float_or_double_e::h46c8cd0dcc2582d9 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:340:35
    #4 0x563dec4618c1 in javaparser::tokenize::float_or_double_dot::h82e9aeb1fcfda14c /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:360:16
    #5 0x563dec4627d1 in javaparser::tokenize::int_or_long_or_double_or_float::h65ddfcd5b6705a25 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:387:21
    #6 0x563dec455a65 in javaparser::tokenize::tokenize::hbb54c9df49b3a101 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:61:40
    #7 0x563dec4531fc in javaparser::tokenize::apply::h358d4b84885637d0 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:29:39
    #8 0x563dec443feb in javaparser::parse::apply::hf980aa67272d96e5 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:50:24
    #9 0x563dec49595d in esfuzzvrf::main::hbe23bc721285dfe3 /home/xsh/code/rust-asan/fuzz/es-vrf.rs:13:21
    #10 0x563dec4956b6 in std::rt::lang_start::_$u7b$$u7b$closure$u7d$$u7d$::h9ff59a1f3fd2f7f6 /home/xsh/code/rust-compiler/src/libstd/rt.rs:67:34
    #11 0x563dec56d632 in std::rt::lang_start_internal::h32d9533fcd93e198 (/home/xsh/code/rust-asan/fuzz/target/shihao/x86_64-unknown-linux-gnu/debug/esfuzzvrf+0x587632)
    #12 0x563dec4957f5 in std::rt::lang_start::h8db7b36e247e2e70 /home/xsh/code/rust-compiler/src/libstd/rt.rs:67:5
    #13 0x563dec495829 in main (/home/xsh/code/rust-asan/fuzz/target/shihao/x86_64-unknown-linux-gnu/debug/esfuzzvrf+0x4af829)
    #14 0x7f8857783bf6 in __libc_start_main /build/glibc-S9d2JN/glibc-2.27/csu/../csu/libc-start.c:310
    #15 0x563dec042d89 in _start (/home/xsh/code/rust-asan/fuzz/target/shihao/x86_64-unknown-linux-gnu/debug/esfuzzvrf+0x5cd89)

0x602000000072 is located 0 bytes to the right of 2-byte region [0x602000000070,0x602000000072)
allocated by thread T0 here:
    #0 0x563dec0c1380 in malloc /home/xsh/code/rust-compiler/src/llvm-project/compiler-rt/lib/asan/asan_malloc_linux.cpp:145
    #1 0x563dec57ec41 in __rdl_alloc (/home/xsh/code/rust-asan/fuzz/target/shihao/x86_64-unknown-linux-gnu/debug/esfuzzvrf+0x598c41)
    #2 0x563dec4faba0 in _$LT$alloc..alloc..Global$u20$as$u20$core..alloc..AllocRef$GT$::alloc::h1d958f1164914e04 /home/xsh/code/rust-compiler/src/liballoc/alloc.rs:174:49
    #3 0x563dec513529 in alloc::raw_vec::RawVec$LT$T$C$A$GT$::allocate_in::h8c9fe1eed52903de /home/xsh/code/rust-compiler/src/liballoc/raw_vec.rs:183:32
    #4 0x563dec512faf in alloc::raw_vec::RawVec$LT$T$C$A$GT$::with_capacity_in::h7cff6a01080b8515 /home/xsh/code/rust-compiler/src/liballoc/raw_vec.rs:159:9
    #5 0x563dec508aa3 in alloc::slice::_$LT$impl$u20$$u5b$T$u5d$$GT$::to_vec::hd078a48ac32ce366 /home/xsh/code/rust-compiler/src/liballoc/slice.rs:393:9
    #6 0x563dec508773 in alloc::slice::_$LT$impl$u20$alloc..borrow..ToOwned$u20$for$u20$$u5b$T$u5d$$GT$::to_owned::haae66104800fed2c /home/xsh/code/rust-compiler/src/liballoc/slice.rs:726:9
    #7 0x563dec1e20e4 in alloc::str::_$LT$impl$u20$alloc..borrow..ToOwned$u20$for$u20$str$GT$::to_owned::h328f02418fa43b36 /home/xsh/code/rust-compiler/src/liballoc/str.rs:205:46
    #8 0x563dec443be6 in javaparser::parse::apply::hf980aa67272d96e5 /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:47:18
    #9 0x563dec49595d in esfuzzvrf::main::hbe23bc721285dfe3 /home/xsh/code/rust-asan/fuzz/es-vrf.rs:13:21

SUMMARY: AddressSanitizer: heap-buffer-overflow /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/span.rs:22:14 in javaparser::tokenize::span::raw_char_at::ha1bcab0e81f33201
Shadow bytes around the buggy address:
  0x0c047fff7fb0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c047fff7fc0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c047fff7fd0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c047fff7fe0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c047fff7ff0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c047fff8000: fa fa fd fa fa fa 05 fa fa fa fd fa fa fa[02]fa
  0x0c047fff8010: fa fa 00 02 fa fa fd fa fa fa 02 fa fa fa fa fa
  0x0c047fff8020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8040: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c047fff8050: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==8557==ABORTING

Expect:
no heap buffer overflow

fatal runtime error: stack overflow

Hi @tanin47

i run your java parser and have many (more than 300k) java + kotlin loc project.

i got

fatal runtime error: stack overflow
error: test failed, to rerun pass '-p javaparser --test main'`

how to overcome this ?

panicked at 'byte index 1 is not a char boundary; it is inside 'lj' (bytes 0..2) of `ljadfadfadf`'

Input: The shoes jad beljadfadfadf

Code:

fn main(){
    // let d = input
    let _ = parse::apply(&d, "hello.java");
}

Output:

thread 'main' panicked at 'byte index 1 is not a char boundary; it is inside 'lj' (bytes 0..2) of `ljadfadfadf`', /home/xsh/code/rust-compiler/src/libcore/str/mod.rs:2721:13
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: core::panicking::panic_fmt
   8: core::str::slice_error_fail
   9: core::str::<impl str>::split_at
             at /home/xsh/code/rust-compiler/src/libcore/str/mod.rs:2721
  10: javaparser::tokenize::combinator::take
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/combinator.rs:112
  11: javaparser::tokenize::float_or_double_dot
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:352
  12: javaparser::tokenize::int_or_long_or_double_or_float
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:387
  13: javaparser::tokenize::tokenize
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:61
  14: javaparser::tokenize::apply
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/tokenize/mod.rs:29
  15: javaparser::parse::apply
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:50

Expect:
properly return error instead of panic

panicked at 'called `Option::unwrap()` on a `None` value'

Input: `` (empty input)

Code:

fn main(){
    // let d = input
    let _ = parse::apply(&d, "hello.java");
}

Output:

thread 'main' panicked at 'called `Option::unwrap()` on a `None` value', /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:64:50
stack backtrace:
   0: <std::sys_common::backtrace::_print::DisplayBacktrace as core::fmt::Display>::fmt
   1: core::fmt::write
   2: std::io::Write::write_fmt
   3: std::panicking::default_hook::{{closure}}
   4: std::panicking::default_hook
   5: std::panicking::rust_panic_with_hook
   6: rust_begin_unwind
   7: core::panicking::panic_fmt
   8: core::panicking::panic
   9: core::option::Option<T>::unwrap
             at /home/xsh/code/rust-compiler/src/libcore/macros/mod.rs:10
  10: javaparser::parse::apply
             at /home/xsh/.cargo/git/checkouts/javaparser.rs-688921d772d2aa67/7165b63/src/parse/mod.rs:64

Expect:
properly return error instead of panic

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.