Skip to content

Panic on some input parameters #9

@anti-social

Description

@anti-social

Here is an example of a program that panics:

use std::time::Instant;

use raptor_code::{decode_source_block, encode_source_block};

fn main() {
    let source_block_size = 100 * 4;
    // Following works fine
    // let source_block_size = 100 * 5;
    
    let packet_size = 140;
    let mut source_block = Vec::with_capacity(source_block_size);
    let mut c = 0u8;
    for _ in 0..source_block_size {
        source_block.push(c);
        c = c.wrapping_add(1);
    }
    dbg!(source_block.len());

    let start_encode_at = Instant::now();
    let max_source_symbols = (source_block_size as f64 / packet_size as f64).ceil() as usize;
    dbg!(max_source_symbols);
    let (encoded_blocks, k) = encode_source_block(&source_block, max_source_symbols, 2);
    println!("Data encoded for {:?}", start_encode_at.elapsed());
    println!("Encoded blocks: {}, {k}", encoded_blocks.len());
    println!("Block 0 size: {}", encoded_blocks[0].len());
    println!("Total encoded data size: {}", encoded_blocks.iter().map(|b| b.len()).sum::<usize>());

    let mut received_blocks = Vec::with_capacity(encoded_blocks.len());
    for (i, encoded_block) in encoded_blocks.into_iter().enumerate() {
        if i < 1 {
            received_blocks.push(None);
        } else {
            received_blocks.push(Some(encoded_block));
        }
    }

    let start_decode_at = Instant::now();
    let Some(decoded_data) = decode_source_block(&received_blocks, k as usize, source_block_size) else {
        println!("!!! Unable to decode data !!!");
        return;
    };
    println!("Data decoded for {:?}", start_decode_at.elapsed());

    println!("Decoded data size: {}", &decoded_data.len());
    println!("Decoded data: {:?}", &decoded_data[..100]);
}

When run it got a panic error:

$ cargo run --release
   Compiling fec-test v0.1.0 (/home/user/projects/fec-test)
    Finished `release` profile [optimized] target(s) in 0.14s
     Running `target/release/fec-test`
[src/main.rs:14:5] source_block.len() = 400
[src/main.rs:18:5] max_source_symbols = 3

thread 'main' panicked at /home/user/projects/raptor/src/sparse_matrix.rs:90:46:
index out of bounds: the len is 0 but the index is 0
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions