Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
identifier `α` contains homoglyph candidates: α (03B1)→a (in string/comment) (raw pass, confidence 0.35)
(r"[α-ω]x", Some(vec![0xCE, 0xCF])),
(r"a?", None),
(r"(?!x)", None),
-
identifier `α` contains homoglyph candidates: α (03B1)→a (in string/comment) (raw pass, confidence 0.35)
(r"(?i)[à-ÿ]", Some(vec![0xC3, 0xC5, 0xE2])),
(r"(?i)[α-ω]", Some(vec![0xC2, 0xCD, 0xCE, 0xCF, 0xE1, 0xE2])),
(r"(?i)[0-9_]", Some(b"0123456789_".to_vec())),
-
identifier `xПРИВЕТ` contains homoglyph candidates: Р (0420)→P, В (0412)→B, Е (0415)→E, Т (0422)→T (in string/comment) (raw pass, confidence 0.35)
assert!(match_text(r"(?<=x)(?i)привет", "xПРИВЕТ"));
assert!(match_text(r"(?<=x)(?i)ПРИВЕТ", "xпривет"));
-
identifier `xПРИВЕТ` mixes scripts: Latin + Cyrillic (in string/comment) (raw pass, confidence 0.40)
assert!(match_text(r"(?<=x)(?i)привет", "xПРИВЕТ"));
assert!(match_text(r"(?<=x)(?i)ПРИВЕТ", "xпривет"));
-
identifier `xпривет` contains homoglyph candidates: р (0440)→p, е (0435)→e (in string/comment) (raw pass, confidence 0.35)
assert!(match_text(r"(?<=x)(?i)привет", "xПРИВЕТ"));
assert!(match_text(r"(?<=x)(?i)ПРИВЕТ", "xпривет"));
-
identifier `xпривет` mixes scripts: Latin + Cyrillic (in string/comment) (raw pass, confidence 0.40)
assert!(match_text(r"(?<=x)(?i)привет", "xПРИВЕТ"));
assert!(match_text(r"(?<=x)(?i)ПРИВЕТ", "xпривет"));
-
identifier `ωμεγα` contains homoglyph candidates: α (03B1)→a (in string/comment) (raw pass, confidence 0.35)
if with_match {
haystack.push_str("ωμεγα ΩΜΕΓΑ");
}
c.bench_function(name, |b| {
-
identifier `ωμεγα` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)
if with_match {
haystack.push_str("ωμεγα ΩΜΕΓΑ");
}
c.bench_function(name, |b| {
-
identifier `aΛb` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert!(matches_literal_casei_unicode("aΛb", "AλB"));
assert!(!matches_literal_casei_unicode("straße", "STRASSE"));
-
identifier `AλB` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert!(matches_literal_casei_unicode("aΛb", "AλB"));
assert!(!matches_literal_casei_unicode("straße", "STRASSE"));
-
identifier `αα` contains homoglyph candidates: α (03B1)→a, α (03B1)→a (in string/comment) (raw pass, confidence 0.35)
assert!(!matches_literal_casei_unicode("ſa", "ſab"));
assert!(!matches_literal_casei_unicode("αα", "α"));
}
-
identifier `α` contains homoglyph candidates: α (03B1)→a (in string/comment) (raw pass, confidence 0.35)
assert!(!matches_literal_casei_unicode("ſa", "ſab"));
assert!(!matches_literal_casei_unicode("αα", "α"));
}
-
identifier `δabcABC` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)
assert_match_bytes(r"(abc)(?i:\1)", "δabcABC".as_bytes());
-
identifier `xπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "$ππ", "");
assert_expansion(&cap, "$xπ", "");
assert_expansion(&cap, "${0}π", "abcdπ");
assert_expansion(&cap, "${1}π", "aπ");
-
identifier `abcdπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "$xπ", "");
assert_expansion(&cap, "${0}π", "abcdπ");
assert_expansion(&cap, "${1}π", "aπ");
assert_expansion(&cap, "${2}π", "bπ");
-
identifier `aπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${0}π", "abcdπ");
assert_expansion(&cap, "${1}π", "aπ");
assert_expansion(&cap, "${2}π", "bπ");
assert_expansion(&cap, "${3}π", "cπ");
-
identifier `bπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${1}π", "aπ");
assert_expansion(&cap, "${2}π", "bπ");
assert_expansion(&cap, "${3}π", "cπ");
assert_expansion(&cap, "${4}π", "dπ");
-
identifier `cπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${2}π", "bπ");
assert_expansion(&cap, "${3}π", "cπ");
assert_expansion(&cap, "${4}π", "dπ");
assert_expansion(&cap, "${π}π", "cπ");
-
identifier `dπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${3}π", "cπ");
assert_expansion(&cap, "${4}π", "dπ");
assert_expansion(&cap, "${π}π", "cπ");
assert_expansion(&cap, "${x}π", "dπ");
-
identifier `cπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${4}π", "dπ");
assert_expansion(&cap, "${π}π", "cπ");
assert_expansion(&cap, "${x}π", "dπ");
assert_expansion(&cap, "$", "$");
-
identifier `dπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_expansion(&cap, "${π}π", "cπ");
assert_expansion(&cap, "${x}π", "dπ");
assert_expansion(&cap, "$", "$");
assert_expansion(&cap, "$π√", "c√");
-
identifier `abcdπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\x", "\\x");
assert_python_expansion(&cap, "\\0π", "abcdπ");
assert_python_expansion(&cap, "\\1π", "aπ");
assert_python_expansion(&cap, "\\2π", "bπ");
-
identifier `aπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\0π", "abcdπ");
assert_python_expansion(&cap, "\\1π", "aπ");
assert_python_expansion(&cap, "\\2π", "bπ");
assert_python_expansion(&cap, "\\3π", "cπ");
-
identifier `bπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\1π", "aπ");
assert_python_expansion(&cap, "\\2π", "bπ");
assert_python_expansion(&cap, "\\3π", "cπ");
assert_python_expansion(&cap, "\\4π", "dπ");
-
identifier `cπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\2π", "bπ");
assert_python_expansion(&cap, "\\3π", "cπ");
assert_python_expansion(&cap, "\\4π", "dπ");
assert_python_expansion(&cap, "\\ππ", "\\ππ");
-
identifier `dπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\3π", "cπ");
assert_python_expansion(&cap, "\\4π", "dπ");
assert_python_expansion(&cap, "\\ππ", "\\ππ");
assert_python_expansion(&cap, "\\xπ", "\\xπ");
-
identifier `xπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\ππ", "\\ππ");
assert_python_expansion(&cap, "\\xπ", "\\xπ");
assert_python_expansion(&cap, "\\g<0>π", "abcdπ");
assert_python_expansion(&cap, "\\g<1>π", "aπ");
-
identifier `xπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\ππ", "\\ππ");
assert_python_expansion(&cap, "\\xπ", "\\xπ");
assert_python_expansion(&cap, "\\g<0>π", "abcdπ");
assert_python_expansion(&cap, "\\g<1>π", "aπ");
-
identifier `abcdπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\xπ", "\\xπ");
assert_python_expansion(&cap, "\\g<0>π", "abcdπ");
assert_python_expansion(&cap, "\\g<1>π", "aπ");
assert_python_expansion(&cap, "\\g<2>π", "bπ");
-
identifier `aπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<0>π", "abcdπ");
assert_python_expansion(&cap, "\\g<1>π", "aπ");
assert_python_expansion(&cap, "\\g<2>π", "bπ");
assert_python_expansion(&cap, "\\g<3>π", "cπ");
-
identifier `bπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<1>π", "aπ");
assert_python_expansion(&cap, "\\g<2>π", "bπ");
assert_python_expansion(&cap, "\\g<3>π", "cπ");
assert_python_expansion(&cap, "\\g<4>π", "dπ");
-
identifier `cπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<2>π", "bπ");
assert_python_expansion(&cap, "\\g<3>π", "cπ");
assert_python_expansion(&cap, "\\g<4>π", "dπ");
assert_python_expansion(&cap, "\\g<π>π", "cπ");
-
identifier `dπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<3>π", "cπ");
assert_python_expansion(&cap, "\\g<4>π", "dπ");
assert_python_expansion(&cap, "\\g<π>π", "cπ");
assert_python_expansion(&cap, "\\g<x>π", "dπ");
-
identifier `cπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<4>π", "dπ");
assert_python_expansion(&cap, "\\g<π>π", "cπ");
assert_python_expansion(&cap, "\\g<x>π", "dπ");
assert_python_expansion(&cap, "\\", "\\");
-
identifier `dπ` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)
assert_python_expansion(&cap, "\\g<π>π", "cπ");
assert_python_expansion(&cap, "\\g<x>π", "dπ");
assert_python_expansion(&cap, "\\", "\\");
assert_python_expansion(&cap, "\\\\π", "\\π");
-
identifier `δΔfoo` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)
assert_no_match(r"(δ)\1", "δΔ");
assert_no_match(r"(δδ)\1", "δΔfoo");
assert_no_match(r"(δδ)\1", "δΔ");
Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.