Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stack Overflow in full_moon::parse with Excessive ( #322

Open
rfuzz opened this issue Oct 6, 2024 · 0 comments
Open

Stack Overflow in full_moon::parse with Excessive ( #322

rfuzz opened this issue Oct 6, 2024 · 0 comments
Labels
bug Something isn't working

Comments

@rfuzz
Copy link

rfuzz commented Oct 6, 2024

Hello, while fuzz testing the current crate, I found that an excessive number of ( characters can cause a stack overflow (this can be triggered in both debug and release builds):

fn main() {
    let s = "((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((";
    match full_moon::parse(s) {
        Ok(_) => {}
        Err(e) => { println!("Err: {:?}", e); }
    }
}

Below is the crash log for the debug build:

❯ valgrind ./target/debug/full_moon_fuzz_target_test  
==3998728== Memcheck, a memory error detector
==3998728== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==3998728== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==3998728== Command: ./target/debug/full_moon_fuzz_target_test
==3998728== 
==3998728== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3998728== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3998728== 
==3998728== Process terminating with default action of signal 11 (SIGSEGV)
==3998728==  Access not within mapped region at address 0x1FFE801F60
==3998728== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3998728==    at 0x1BB3AE: full_moon::tokenizer::lexer::Lexer::process_next (lexer.rs:255)
==3998728==  If you believe this happened as a result of a stack
==3998728==  overflow in your program's main thread (unlikely but
==3998728==  possible), you can try to increase the size of the
==3998728==  main thread stack using the --main-stacksize= flag.
==3998728==  The main thread stack size used in this run was 8388608.

Here’s the crash log for the release build:

❯ valgrind ./target/release/full_moon_fuzz_target_test
==3999207== Memcheck, a memory error detector
==3999207== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==3999207== Using Valgrind-3.18.1 and LibVEX; rerun with -h for copyright info
==3999207== Command: ./target/release/full_moon_fuzz_target_test
==3999207== 
==3999207== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3999207== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3999207== 
==3999207== Process terminating with default action of signal 11 (SIGSEGV)
==3999207==  Access not within mapped region at address 0x1FFE801FC8
==3999207== Stack overflow in thread #1: can't grow stack to 0x1ffe801000
==3999207==    at 0x170423: full_moon::ast::parsers::parse_prefix_and_suffixes (in /home/ubuntu/full_moon_fuzz_target_test/target/release/full_moon_fuzz_target_test)
==3999207==  If you believe this happened as a result of a stack
==3999207==  overflow in your program's main thread (unlikely but
==3999207==  possible), you can try to increase the size of the
==3999207==  main thread stack using the --main-stacksize= flag.
==3999207==  The main thread stack size used in this run was 8388608.

The root cause may lie in the full_moon::tokenizer::lexer::Lexer::process_next or full_moon::ast::parsers::parse_prefix_and_suffixes functions.

@JohnnyMorganz JohnnyMorganz added the bug Something isn't working label Oct 11, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants