• weker01
    link
    fedilink
    arrow-up
    2
    ·
    edit-2
    10 hours ago

    The only way to make Rust segfault is by performing unsafe operations.

    Challange accepted. The following Rust code technically segfaults:

    fn stackover(a : i64) -> i64 {
        return stackover(a);
    }
    
    
    fn main() {
        println!("{}", stackover(100));
    }
    

    A stack overflow is technically a segmentation violation. At least on linux the program recives the SIGSEGV signal. This compiles and I am no rust dev but this does not use unsafe code, right?

    While the compiler shows a warning, the error message the program prints when run is not very helpfull IMHO:

    thread 'main' has overflowed its stack
    fatal runtime error: stack overflow
    [1]    45211 IOT instruction (core dumped)  ../target/debug/rust
    

    Edit: Even the compiler warning can be tricked by making it do recusion in pairs:

    fn stackover_a(a : i64) -> i64 {
        return stackover_b(a);
    }
    
    fn stackover_b(a : i64) -> i64 {
        return stackover_a(a);
    }
    
    fn main() {
        println!("{}", stackover_a(100));
    }