From 1cce4517dfd5c1e436c2286c2e1e432c578184a3 Mon Sep 17 00:00:00 2001 From: Aditya kumar singh <143548997+Adityakk9031@users.noreply.github.com> Date: Sat, 15 Aug 2026 17:51:58 +0530 Subject: [PATCH 1/2] fix(rules): do not hardcode js extensions in apply_centralized_exclusions --- src/rules.rs | 9 ++----- tests/unit/exclusion_patterns_tests.rs | 35 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/rules.rs b/src/rules.rs index 19f64cd..50f75eb 100644 --- a/src/rules.rs +++ b/src/rules.rs @@ -336,19 +336,14 @@ impl Rules { } } } else { - // If rule doesn't have file_types, create one with centralized exclusions + // If rule doesn't have file_types, create one with centralized exclusions without restricting extensions rule.file_types = Some(FileTypes { python: None, java: None, javascript: None, tsx: None, html: None, - extensions: Some(vec![ - ".js".to_string(), - ".jsx".to_string(), - ".ts".to_string(), - ".tsx".to_string(), - ]), + extensions: None, include_patterns: None, exclude_patterns: Some(patterns.clone()), }); diff --git a/tests/unit/exclusion_patterns_tests.rs b/tests/unit/exclusion_patterns_tests.rs index 3063016..f777f15 100644 --- a/tests/unit/exclusion_patterns_tests.rs +++ b/tests/unit/exclusion_patterns_tests.rs @@ -47,4 +47,39 @@ mod exclusion_patterns_tests { assert_eq!(p.get_patterns("backend"), Vec::::new()); assert_eq!(p.get_patterns("common"), Vec::::new()); } + + #[test] + fn apply_centralized_exclusions_does_not_hardcode_js_extensions() { + let mut rules = sighthound::rules::Rules { + rules: vec![sighthound::UnifiedRule { + id: Some("test-rule".to_string()), + name: Some("Generic Rule".to_string()), + description: None, + category: None, + mode: "search".to_string(), + pattern: Some("eval(".to_string()), + patterns: None, + sources: None, + sinks: None, + propagators: None, + sanitizers: None, + finding_type: None, + severity: None, + confidence: None, + file_types: None, + conditions: None, + tags: None, + cwe_id: None, + message: None, + }], + }; + + rules.apply_centralized_exclusions(&patterns(), "backend"); + let file_types = rules.rules[0].file_types.as_ref().unwrap(); + assert!(file_types.extensions.is_none()); + assert_eq!( + file_types.exclude_patterns.as_ref().unwrap(), + &vec!["*.min.js".to_string(), "*_test.go".to_string()] + ); + } } From 40f36255b9898f22deeb2452c752dba7a9284cb6 Mon Sep 17 00:00:00 2001 From: Aditya kumar singh <143548997+Adityakk9031@users.noreply.github.com> Date: Thu, 27 Aug 2026 16:53:24 +0530 Subject: [PATCH 2/2] test(rules): test rule_applies_to_file for non-js and excluded paths --- tests/unit/exclusion_patterns_tests.rs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/tests/unit/exclusion_patterns_tests.rs b/tests/unit/exclusion_patterns_tests.rs index f777f15..90372b8 100644 --- a/tests/unit/exclusion_patterns_tests.rs +++ b/tests/unit/exclusion_patterns_tests.rs @@ -75,11 +75,20 @@ mod exclusion_patterns_tests { }; rules.apply_centralized_exclusions(&patterns(), "backend"); - let file_types = rules.rules[0].file_types.as_ref().unwrap(); - assert!(file_types.extensions.is_none()); + let file_types = rules.rules[0].file_types.as_ref(); + assert!(file_types.unwrap().extensions.is_none()); assert_eq!( - file_types.exclude_patterns.as_ref().unwrap(), + file_types.unwrap().exclude_patterns.as_ref().unwrap(), &vec!["*.min.js".to_string(), "*_test.go".to_string()] ); + + // Exercise applicability: non-JS files match, but excluded files are skipped + assert!(sighthound::scanner::utils::rule_applies_to_file(file_types, "src/main.py")); + assert!(sighthound::scanner::utils::rule_applies_to_file(file_types, "src/service.go")); + assert!(!sighthound::scanner::utils::rule_applies_to_file(file_types, "src/app.min.js")); + assert!(!sighthound::scanner::utils::rule_applies_to_file( + file_types, + "src/handler_test.go" + )); } }