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
8.9 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 7 of 7 warn and critical signals; 7 demoted to info.
Disclude version
4.1.0
Scanned (UTC)
2026-10-22 05:15

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 pass flagged a base64 string that is a PEM certificate fragment ('MIIDXTCC...' begins a standard X.509 DER encoding) used as benchmark input. Certificate text in a test or benchmark script is ordinary, and the raw pass has a high false-positive rate on base64.

  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 zlib decompression of bundled model tables in chardet's format loader.
    Reasoning

    chardet ships compressed language and encoding probability models, and this code decompresses them with zlib to build its lookup tables, checking an expected size first. The pattern matches a dropper, but here it is a bounded, documented model-loading routine inside an encoding detection library with no execution of the decompressed data.

  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.93 A Windows-1251 Cyrillic text sample passed to the detector in a benchmark.
    Reasoning

    The bytes literal is Russian text encoded in Windows-1251 (Cyrillic characters such as 'Счастливые' escaped as \xNN). This is a legitimate encoding-detection sample for a chardet benchmark, not a binary payload or obfuscated 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.93 A Windows-1251 Cyrillic text fixture in a benchmark test.
    Reasoning

    This is a bytes constant holding Windows-1251 Cyrillic text split across concatenated literals, the normal way to write encoded test fixtures for an encoding detector. The high escape ratio reflects non-ASCII text, not a payload.

  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.93 A base64-encoded localhost PEM certificate in a test fixture.
    Reasoning

    The base64 lines form a PEM certificate for localhost in a test of escape handling. Test certificate data is an expected artifact, and the raw pass flagged it only because it looks like base64.

  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.93 Continuation of a base64 PEM certificate test fixture.
    Reasoning

    This is a continuation of the same PEM certificate test fixture, ending in its END CERTIFICATE line. It is ordinary test data with no execution or hiding behavior.

  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.94 A GB18030-encoded Chinese text fixture in a regression test.
    Reasoning

    The bytes literal is GB18030 and Chinese text, explicitly commented as the GB18030 encoding of U+FEFF, passed to a detection assertion. It is a regression test for a reported encoding issue and not a hidden payload.

  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.1.0
git clone https://github.com/chardet/chardet chardet && cd chardet
git checkout 7.7.0
disclude scan --severity info --diff 7.6.0 .