zip_extensions/audit/handlers/
names.rs1use super::util;
2use crate::audit::entry_audit_handler::EntryAuditHandler;
3use crate::audit::entry_view::EntryView;
4use crate::audit::report::{SuspiciousEntry, SuspiciousReason, ZipAuditReport};
5
6pub struct NamesHandler;
7
8impl EntryAuditHandler for NamesHandler {
12 fn visit(&mut self, view: &EntryView, report: &mut ZipAuditReport) {
13 Self::detect_long_name(&view, report);
14 Self::detect_control_chars(&view, report);
15 Self::detect_windows_reserved_name(&view, report);
16 }
17}
18
19impl NamesHandler {
20 fn detect_long_name(view: &&EntryView, report: &mut ZipAuditReport) {
21 if util::path_is_extremely_long(&view.name_raw) {
22 report.suspicious_entries.push(SuspiciousEntry {
23 name: view.enclosed_name.clone(),
24 reason: SuspiciousReason::ExtremelyLongPath,
25 });
26 }
27 }
28
29 fn detect_control_chars(view: &&EntryView, report: &mut ZipAuditReport) {
30 if util::contains_control_chars(&view.name_raw) {
31 report.suspicious_entries.push(SuspiciousEntry {
32 name: view.enclosed_name.clone(),
33 reason: SuspiciousReason::ControlCharsInName,
34 });
35 }
36 }
37
38 fn detect_windows_reserved_name(view: &&EntryView, report: &mut ZipAuditReport) {
39 if util::is_windows_reserved_name(&view.enclosed_name) {
40 report.suspicious_entries.push(SuspiciousEntry {
41 name: view.enclosed_name.clone(),
42 reason: SuspiciousReason::WindowsReservedName,
43 });
44 }
45 }
46}