PyPI / chardet / 7.7.0

chardet 7.7.0

Source
https://github.com/chardet/chardet
Tag scanned
7.7.0
Compared with
7.6.0 (8 signals introduced since)
Files
133 scanned, 10 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 54 info
Scan time
7.6 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 7 of 7 warn and critical signals; 7 demoted to info.
Disclude version
4.0.0
Scanned (UTC)
2026-10-18 00:55

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info warn → info by review encoding-base64 scripts/benchmark_large_inputs.py:60:10 new in this release

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

            "base64",
            "MIIDXTCCAkWgAwIBAgIJAL+n2xQ3vBcZMA0GCSqGSIb3DQEBCwUAMEUxCzAJBgNV\n",
            "ascii",
        ),
    likely benign LLM, confidence 0.90 A base64-encoded certificate fragment used as benchmark input.
    Reasoning

    The raw base64 match is a PEM certificate fragment in a benchmark script that feeds encoded test input to the detector. It is test data, not a hidden payload, and raw-pass findings have a high false-positive rate.

  2. info warn → info by review decoder-decompress-payload src/chardet/models/_format.py:63:14 new in this release

    file imports decoder module(s) zlib and calls `.decompress()` — embedded payload decompressed at runtime (ast pass, confidence 0.75)

        expected_size = num_models * 65536
        decomp = zlib.decompressobj()
        models: dict[str, bytes] = {}
        table = bytearray()
    likely benign LLM, confidence 0.80 Loads bundled zlib-compressed language model tables for the chardet detector.
    Reasoning

    chardet is an encoding-detection library that ships compressed language models. Decompressing zlib data bundled with the package to load those models is the expected design. The payload is data loaded into a bytes/dict structure, not executed, so this is not a dropper. The residual doubt is that the model data itself is opaque and was not inspected.

  3. info unicode-homoglyph tests/test_api.py:1088:13 new in this release

    identifier `Καλημέρα` contains homoglyph candidates: Κ (039A)→K, α (03B1)→a, η (03B7)→n, ρ (03C1)→p (in string/comment) (raw pass, confidence 0.35)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  4. info unicode-mixed-script tests/test_api.py:1088:13 new in this release

    identifier `Καλημέρα` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  5. info unicode-homoglyph tests/test_api.py:1088:30 new in this release

    identifier `κόσμε` contains homoglyph candidates: κ (03BA)→k (in string/comment) (raw pass, confidence 0.35)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  6. info unicode-mixed-script tests/test_api.py:1088:30 new in this release

    identifier `κόσμε` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  7. info unicode-homoglyph tests/test_api.py:1088:62 new in this release

    identifier `δοκιμή` contains homoglyph candidates: ο (03BF)→o, κ (03BA)→k (in string/comment) (raw pass, confidence 0.35)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  8. info unicode-mixed-script tests/test_api.py:1088:62 new in this release

    identifier `δοκιμή` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        """
        data = "Καλημέρα κόσμε, αυτό είναι δοκιμή. ".encode("iso8859-7") * 40
        plain = chardet.detect_all(data)
        assert [d["encoding"] for d in plain][:2] == ["ISO-8859-7", "Windows-1253"]
  9. info warn → info by review payload-bytes-literal scripts/benchmark_memory.py:99:9

    concatenated bytes literal contains 35 `\xNN` escapes (96% of content) — binary payload shape (ast pass, confidence 0.85)

        detect(
            b"\xc2\xf1\xe5 \xf1\xf7\xe0\xf1\xf2\xeb\xe8\xe2\xfb\xe5 \xf1\xe5\xec"
            b"\xfc\xe8 \xef\xee\xf5\xee\xe6\xe8 \xe4\xf0\xf3\xe3 \xed\xe0 \xe4"
            b"\xf0\xf3\xe3\xe0"
    likely benign LLM, confidence 0.90 Cyrillic cp1251 sample text written as escaped bytes for detector input.
    Reasoning

    The byte literal is Windows-1251 encoded Russian text, the sample input for an encoding detector. The escapes are expected for non-ASCII test strings in a character-detection library, and nothing executes or decodes into code.

  10. info unicode-homoglyph scripts/substitutions.py:181:28

    identifier `і` contains homoglyph candidates: і (0456)→i (in string/comment) (raw pass, confidence 0.35)

        # Ukrainian/Belarusian
        "\u0456": "\u0438",  # і → и
        "\u0406": "\u0418",  # І → И
        "\u0491": "\u0433",  # ґ → г (reintroduced 1990, missing from Soviet-era CP866)
  11. info unicode-homoglyph scripts/substitutions.py:193:35

    identifier `Н` contains homoglyph candidates: Н (041D)→H (in string/comment) (raw pass, confidence 0.35)

        "\u045a": "\u043d",  # њ (NJE) → н (EN) — visual base letter
        "\u040a": "\u041d",  # Њ → Н
        "\u045b": "\u0442",  # ћ (TSHE) → т (TE) — visual base letter
        "\u040b": "\u0422",  # Ћ → Т
  12. info unicode-homoglyph scripts/substitutions.py:195:35

    identifier `Т` contains homoglyph candidates: Т (0422)→T (in string/comment) (raw pass, confidence 0.35)

        "\u045b": "\u0442",  # ћ (TSHE) → т (TE) — visual base letter
        "\u040b": "\u0422",  # Ћ → Т
        "\u045f": "\u0446",  # џ (DZHE) → ц (TSE) — visually more similar than д
        "\u040f": "\u0426",  # Џ → Ц
  13. info unicode-homoglyph scripts/substitutions.py:202:35

    identifier `К` contains homoglyph candidates: К (041A)→K (in string/comment) (raw pass, confidence 0.35)

        "\u045c": "\u043a",  # ќ (KJE) → к (KA)
        "\u040c": "\u041a",  # Ќ → К
        "\u0455": "\u0437",  # ѕ (DZE) → з (ZE) — closest sound
        "\u0405": "\u0417",  # Ѕ → З
  14. info unicode-homoglyph scripts/substitutions.py:535:23

    identifier `а` contains homoglyph candidates: а (0430)→a (in string/comment) (raw pass, confidence 0.35)

    _SERBIAN_CYRILLIC_TO_GAJ: dict[str, str] = {
        "\u0430": "a",  # а → a
        "\u0431": "b",  # б → b
        "\u0432": "v",  # в → v
  15. info unicode-homoglyph scripts/substitutions.py:541:23

    identifier `е` contains homoglyph candidates: е (0435)→e (in string/comment) (raw pass, confidence 0.35)

        "\u0452": "đ",  # ђ → đ
        "\u0435": "e",  # е → e
        "\u0436": "ž",  # ж → ž
        "\u0437": "z",  # з → z
  16. info unicode-homoglyph scripts/substitutions.py:550:23

    identifier `о` contains homoglyph candidates: о (043E)→o (in string/comment) (raw pass, confidence 0.35)

        "\u043d": "n",  # н → n
        "\u043e": "o",  # о → o
        "\u043f": "p",  # п → p
        "\u0440": "r",  # р → r
  17. info unicode-homoglyph scripts/substitutions.py:552:23

    identifier `р` contains homoglyph candidates: р (0440)→p (in string/comment) (raw pass, confidence 0.35)

        "\u043f": "p",  # п → p
        "\u0440": "r",  # р → r
        "\u0441": "s",  # с → s
        "\u0442": "t",  # т → t
  18. info unicode-homoglyph scripts/substitutions.py:553:23

    identifier `с` contains homoglyph candidates: с (0441)→c (in string/comment) (raw pass, confidence 0.35)

        "\u0440": "r",  # р → r
        "\u0441": "s",  # с → s
        "\u0442": "t",  # т → t
        "\u045b": "ć",  # ћ → ć
  19. info unicode-homoglyph scripts/substitutions.py:556:23

    identifier `у` contains homoglyph candidates: у (0443)→y (in string/comment) (raw pass, confidence 0.35)

        "\u045b": "ć",  # ћ → ć
        "\u0443": "u",  # у → u
        "\u0444": "f",  # ф → f
        "\u0445": "h",  # х → h
  20. info unicode-homoglyph scripts/substitutions.py:558:23

    identifier `х` contains homoglyph candidates: х (0445)→x (in string/comment) (raw pass, confidence 0.35)

        "\u0444": "f",  # ф → f
        "\u0445": "h",  # х → h
        "\u0446": "c",  # ц → c
        "\u0447": "č",  # ч → č
  21. info unicode-homoglyph scripts/substitutions.py:562:23

    identifier `А` contains homoglyph candidates: А (0410)→A (in string/comment) (raw pass, confidence 0.35)

        "\u0448": "š",  # ш → š
        "\u0410": "A",  # А → A
        "\u0411": "B",  # Б → B
        "\u0412": "V",  # В → V
  22. info unicode-homoglyph scripts/substitutions.py:564:23

    identifier `В` contains homoglyph candidates: В (0412)→B (in string/comment) (raw pass, confidence 0.35)

        "\u0411": "B",  # Б → B
        "\u0412": "V",  # В → V
        "\u0413": "G",  # Г → G
        "\u0414": "D",  # Д → D
  23. info unicode-homoglyph scripts/substitutions.py:568:23

    identifier `Е` contains homoglyph candidates: Е (0415)→E (in string/comment) (raw pass, confidence 0.35)

        "\u0402": "Đ",  # Ђ → Đ
        "\u0415": "E",  # Е → E
        "\u0416": "Ž",  # Ж → Ž
        "\u0417": "Z",  # З → Z
  24. info unicode-homoglyph scripts/substitutions.py:573:23

    identifier `К` contains homoglyph candidates: К (041A)→K (in string/comment) (raw pass, confidence 0.35)

        "\u0408": "J",  # Ј → J
        "\u041a": "K",  # К → K
        "\u041b": "L",  # Л → L
        "\u041c": "M",  # М → M
  25. info unicode-homoglyph scripts/substitutions.py:575:23

    identifier `М` contains homoglyph candidates: М (041C)→M (in string/comment) (raw pass, confidence 0.35)

        "\u041b": "L",  # Л → L
        "\u041c": "M",  # М → M
        "\u041d": "N",  # Н → N
        "\u041e": "O",  # О → O
  26. info unicode-homoglyph scripts/substitutions.py:576:23

    identifier `Н` contains homoglyph candidates: Н (041D)→H (in string/comment) (raw pass, confidence 0.35)

        "\u041c": "M",  # М → M
        "\u041d": "N",  # Н → N
        "\u041e": "O",  # О → O
        "\u041f": "P",  # П → P
  27. info unicode-homoglyph scripts/substitutions.py:577:23

    identifier `О` contains homoglyph candidates: О (041E)→O (in string/comment) (raw pass, confidence 0.35)

        "\u041d": "N",  # Н → N
        "\u041e": "O",  # О → O
        "\u041f": "P",  # П → P
        "\u0420": "R",  # Р → R
  28. info unicode-homoglyph scripts/substitutions.py:579:23

    identifier `Р` contains homoglyph candidates: Р (0420)→P (in string/comment) (raw pass, confidence 0.35)

        "\u041f": "P",  # П → P
        "\u0420": "R",  # Р → R
        "\u0421": "S",  # С → S
        "\u0422": "T",  # Т → T
  29. info unicode-homoglyph scripts/substitutions.py:580:23

    identifier `С` contains homoglyph candidates: С (0421)→C (in string/comment) (raw pass, confidence 0.35)

        "\u0420": "R",  # Р → R
        "\u0421": "S",  # С → S
        "\u0422": "T",  # Т → T
        "\u040b": "Ć",  # Ћ → Ć
  30. info unicode-homoglyph scripts/substitutions.py:581:23

    identifier `Т` contains homoglyph candidates: Т (0422)→T (in string/comment) (raw pass, confidence 0.35)

        "\u0421": "S",  # С → S
        "\u0422": "T",  # Т → T
        "\u040b": "Ć",  # Ћ → Ć
        "\u0423": "U",  # У → U
  31. info unicode-homoglyph scripts/substitutions.py:585:23

    identifier `Х` contains homoglyph candidates: Х (0425)→X (in string/comment) (raw pass, confidence 0.35)

        "\u0424": "F",  # Ф → F
        "\u0425": "H",  # Х → H
        "\u0426": "C",  # Ц → C
        "\u0427": "Č",  # Ч → Č
  32. info unicode-homoglyph tests/test_api.py:107:10

    identifier `Η` contains homoglyph candidates: Η (0397)→H (in string/comment) (raw pass, confidence 0.35)

        data = (
            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
  33. info unicode-homoglyph tests/test_api.py:107:35

    identifier `η` contains homoglyph candidates: η (03B7)→n (in string/comment) (raw pass, confidence 0.35)

        data = (
            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
  34. info unicode-homoglyph tests/test_api.py:107:66

    identifier `μεγαλύτερη` contains homoglyph candidates: α (03B1)→a, ρ (03C1)→p, η (03B7)→n (in string/comment) (raw pass, confidence 0.35)

        data = (
            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
  35. info unicode-mixed-script tests/test_api.py:107:66

    identifier `μεγαλύτερη` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)

        data = (
            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
  36. info unicode-homoglyph tests/test_api.py:108:10

    identifier `Η` contains homoglyph candidates: Η (0397)→H (in string/comment) (raw pass, confidence 0.35)

            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
        modern = chardet.detect(
  37. info unicode-homoglyph tests/test_api.py:108:31

    identifier `μακρά` contains homoglyph candidates: α (03B1)→a, κ (03BA)→k, ρ (03C1)→p (in string/comment) (raw pass, confidence 0.35)

            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
        modern = chardet.detect(
  38. info unicode-mixed-script tests/test_api.py:108:31

    identifier `μακρά` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)

            "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
            "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
        ).encode("iso-8859-7")
        modern = chardet.detect(
  39. info unicode-homoglyph tests/test_api.py:954:18

    identifier `Η` contains homoglyph candidates: Η (0397)→H (in string/comment) (raw pass, confidence 0.35)

                (
                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  40. info unicode-homoglyph tests/test_api.py:954:43

    identifier `η` contains homoglyph candidates: η (03B7)→n (in string/comment) (raw pass, confidence 0.35)

                (
                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  41. info unicode-homoglyph tests/test_api.py:954:74

    identifier `μεγαλύτερη` contains homoglyph candidates: α (03B1)→a, ρ (03C1)→p, η (03B7)→n (in string/comment) (raw pass, confidence 0.35)

                (
                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  42. info unicode-mixed-script tests/test_api.py:954:74

    identifier `μεγαλύτερη` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)

                (
                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  43. info unicode-homoglyph tests/test_api.py:955:18

    identifier `Η` contains homoglyph candidates: Η (0397)→H (in string/comment) (raw pass, confidence 0.35)

                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  44. info unicode-homoglyph tests/test_api.py:955:39

    identifier `μακρά` contains homoglyph candidates: α (03B1)→a, κ (03BA)→k, ρ (03C1)→p (in string/comment) (raw pass, confidence 0.35)

                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  45. info unicode-mixed-script tests/test_api.py:955:39

    identifier `μακρά` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)

                    "Η Αθήνα είναι η πρωτεύουσα και μεγαλύτερη πόλη της Ελλάδας. "
                    "Η πόλη έχει μακρά ιστορία που εκτείνεται πάνω από τρεις χιλιετίες."
                ).encode("iso-8859-7"),
  46. info warn → info by review payload-bytes-literal tests/test_benchmark.py:30:5

    concatenated bytes literal contains 435 `\xNN` escapes (95% of content) — binary payload shape (ast pass, confidence 0.85)

    CYRILLIC_WIN1251 = (
        b"\xc2\xf1\xe5 \xf1\xf7\xe0\xf1\xf2\xeb\xe8\xe2\xfb\xe5 \xf1\xe5\xec"
        b"\xfc\xe8 \xef\xee\xf5\xee\xe6\xe8 \xe4\xf0\xf3\xe3 \xed\xe0 \xe4\xf0"
        b"\xf3\xe3\xe0, \xea\xe0\xe6\xe4\xe0\xff \xed\xe5\xf1\xf7\xe0\xf1\xf2"
    likely benign LLM, confidence 0.90 Test fixture of Cyrillic cp1251 prose as escaped bytes.
    Reasoning

    This is a Cyrillic Windows-1251 text sample in a test file for a character encoding detector. The escaped bytes encode ordinary prose and are used only as test input.

  47. info warn → info by review encoding-base64 tests/test_escape.py:163:11

    base64-like blob (64 bytes, compression ratio 1.06) (raw pass, confidence 0.60)

            b"MIICpDCCAYwCCQDU+pQ4pHgSpDANBgkqhkiG9w0BAQsFADAUMRIwEAYDVQQDDAls\n"
            b"b2NhbGhvc3QwHhcNMjMwNTI5MTI0ODQ3WhcNMjQwNTI4MTI0ODQ3WjAUMRIwEAYD\n"
            b"VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+\n"
            b"7e1RRz+BI/kHMBbOz+FN5bEwMmJ2KKQGXN+yTDaj8bKRMqgJ7MJifi3eFmFnqYg\n"
    likely benign LLM, confidence 0.92 Base64 X.509 certificate body in a test fixture.
    Reasoning

    The base64 lines are a PEM-style X.509 certificate used as test input for escape or encoding handling. The snippet is a standard certificate with a recognizable END marker, so it is a fixture, not an obfuscated payload.

  48. info warn → info by review encoding-base64 tests/test_escape.py:164:11

    base64-like blob (64 bytes, compression ratio 1.17) (raw pass, confidence 0.60)

            b"b2NhbGhvc3QwHhcNMjMwNTI5MTI0ODQ3WhcNMjQwNTI4MTI0ODQ3WjAUMRIwEAYD\n"
            b"VQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC+\n"
            b"7e1RRz+BI/kHMBbOz+FN5bEwMmJ2KKQGXN+yTDaj8bKRMqgJ7MJifi3eFmFnqYg\n"
            b"-----END CERTIFICATE-----\n"
    likely benign LLM, confidence 0.92 Continuation of a base64 certificate fixture in a test file.
    Reasoning

    This is a continuation of the same PEM certificate fixture, ending in the END CERTIFICATE line. It is test data for an encoding-related test.

  49. info warn → info by review payload-bytes-literal tests/test_github_issues.py:362:13

    concatenated bytes literal contains 34 `\xNN` escapes (99% of content) — binary payload shape (ast pass, confidence 0.85)

            _assert_detection(
                b"\x841\x953"  # GB18030 encoding of U+FEFF (BOM)
                b"\xce\xd2\xc3\xbb\xd3\xd0\xc2\xf1\xd4\xb9\xa3\xac"
                b"\xb4\xe8\xc5\xe8\xb5\xc4\xd6\xbb\xca\xc7\xd2\xbb"
    likely benign LLM, confidence 0.90 Regression-test bytes of GB18030 Chinese text, with a BOM case.
    Reasoning

    The bytes are GB18030 and GBK-encoded Chinese text, including a comment about the GB18030 encoding of U+FEFF. They are regression-test inputs for issue reproductions in an encoding detector.

  50. info unicode-homoglyph tests/test_roundtrip_short.py:55:21

    identifier `καλημέρα` contains homoglyph candidates: κ (03BA)→k, α (03B1)→a, η (03B7)→n, ρ (03C1)→p (in string/comment) (raw pass, confidence 0.35)

        ("cp866", "вода"),
        ("iso-8859-7", "καλημέρα"),
        ("windows-1253", "ευχαριστώ πολύ"),
        ("windows-1255", "תודה רבה"),
  51. info unicode-mixed-script tests/test_roundtrip_short.py:55:21

    identifier `καλημέρα` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

        ("cp866", "вода"),
        ("iso-8859-7", "καλημέρα"),
        ("windows-1253", "ευχαριστώ πολύ"),
        ("windows-1255", "תודה רבה"),
  52. info unicode-homoglyph tests/test_statistical.py:95:6

    identifier `Все` contains homoglyph candidates: В (0412)→B, с (0441)→c, е (0435)→e (in string/comment) (raw pass, confidence 0.35)

    _PRUNING_SAMPLES = [
        "Все счастливые семьи похожи друг на друга, каждая несчастливая семья "
        "несчастлива по-своему. Все смешалось в доме Облонских. Жена узнала, "
  53. info unicode-homoglyph tests/test_statistical.py:96:48

    identifier `Все` contains homoglyph candidates: В (0412)→B, с (0441)→c, е (0435)→e (in string/comment) (raw pass, confidence 0.35)

        "несчастлива по-своему. Все смешалось в доме Облонских. Жена узнала, "
        "что муж был в связи с бывшею в их доме француженкою-гувернанткой.".encode(
            "windows-1251"
  54. info unicode-homoglyph tests/test_statistical.py:97:41

    identifier `с` contains homoglyph candidates: с (0441)→c (in string/comment) (raw pass, confidence 0.35)

        "несчастлива по-своему. Все смешалось в доме Облонских. Жена узнала, "
        "что муж был в связи с бывшею в их доме француженкою-гувернанткой.".encode(
            "windows-1251"
        ),

Reproduce This Scan

Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.

cargo install disclude --version 4.0.0
git clone https://github.com/chardet/chardet chardet && cd chardet
git checkout 7.7.0
disclude scan --severity info --diff 7.6.0 .