tanin47 / javaparser.rs Goto Github PK
View Code? Open in Web Editor NEW[work-in-progress] Java parser written in Rust
License: MIT License
[work-in-progress] Java parser written in Rust
License: MIT License
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
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
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 ?
Hi @tanin47
i would like to ask you, how do i changed or append some file using javaparser.rs
or is there any plan for this?
Thanks
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
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
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.