uutils/coreutils
View on GitHubuu shred has a different probability distribution of overwrites from GNU shred
Open
#11611 opened on Apr 3, 2026
U - shredgood first issuereported-canonical-2
Description
uu shred implements both algorithms, and the following test demonstrates that, for 1000 passes, uu shred's default algorithm has 246 multibyte overwrites, in contrast to 318 for GNU's.
#[test]
fn test_pattern_multicount() {
use std::{cell::RefCell, fs::OpenOptions, io::Write};
let mut f = OpenOptions::new().read(true).write(true).create(true).truncate(true).open("/tmp/uu_shred_test_pattern").unwrap();
// create_test_compatible_sequence requires that the random source consist of only 0x55's
f.write(&[0x55; 1024]).unwrap();
f.flush().unwrap();
let rng = Some(RefCell::new(f));
let n = 1000;
let a = crate::create_test_compatible_sequence(n, rng.as_ref()).unwrap();
let b = crate::create_standard_pass_sequence(n).unwrap();
use crate::{PassType,Pattern};
println!("a {:?}", a.iter().filter(|x| matches!(x, PassType::Pattern(Pattern::Multi(_)))).count());
println!("b {:?}", b.iter().filter(|x| matches!(x, PassType::Pattern(Pattern::Multi(_)))).count());
}