Skip to main content

rustriff_lib/domain/
validation.rs

1/// Sanitizes a user/config-supplied IR filename before it is used in a filesystem path.
2///
3/// Accepted filenames must:
4/// - be non-empty after trimming whitespace,
5/// - contain no path separators (`/`, `\\`) or parent-directory segments (`..`),
6/// - end with `.wav` (case-insensitive).
7///
8/// Returns the trimmed filename on success, or a descriptive `Err` string.
9pub fn sanitize_wav_file_name(file_name: &str) -> Result<String, String> {
10    let trimmed = file_name.trim();
11
12    if trimmed.is_empty() {
13        return Err("IR file name cannot be empty".to_string());
14    }
15
16    if trimmed.contains('\\') || trimmed.contains('/') || trimmed.contains("..") {
17        return Err("Invalid IR file name".to_string());
18    }
19
20    if !trimmed.to_ascii_lowercase().ends_with(".wav") {
21        return Err("Only .wav IR files are supported".to_string());
22    }
23
24    Ok(trimmed.to_string())
25}