Fix a bug in lengths computation

This commit is contained in:
Igor Katson 2021-10-28 11:00:03 +01:00
parent 37af0a4afb
commit cc8011cf9a
No known key found for this signature in database
GPG key ID: B4EC22B66D61A3F5
2 changed files with 13 additions and 1 deletions

View file

@ -82,12 +82,16 @@ impl Lengths {
piece_length
);
}
if total_length == 0 {
anyhow::bail!("torrent with 0 length")
}
let total_pieces = ceil_div_u64(total_length as u64, piece_length as u64) as u32;
Ok(Self {
chunk_length,
piece_length,
total_length,
chunks_per_piece: ceil_div_u64(piece_length as u64, chunk_length as u64) as u32,
last_piece_id: ((total_length + 1) / piece_length as u64) as u32,
last_piece_id: total_pieces - 1,
last_piece_length: last_element_size_u64(total_length, piece_length as u64) as u32,
})
}
@ -248,6 +252,12 @@ mod tests {
assert_eq!(l.total_pieces(), 4480);
}
#[test]
fn test_total_pieces_2() {
let l = Lengths::new(4148166656, 2097152, None).unwrap();
assert_eq!(l.total_pieces(), 1978);
}
#[test]
fn test_piece_length() {
let l = make_lengths();