Assignment of a signed value 'str' to a bigger unsigned variable 'ucs4' at /Objects/unicodeobject.c
Maintainer antworten meist innerhalb von 1 Tag
@divya-git03 arbeitet bereits daran.
Seit 05.11.2026.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 78/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Bereich
- backend, operating-systems
Rechercherichtung
Lies den Zweig PyUnicode_4BYTE_KIND in Objects/unicodeobject.c und prüfe, wie _PyUnicodeWriter_WriteLatin1String Bytes über 0x7F behandelt. Bestätige die Vorzeichenerweiterung mit einem gezielten Test, der einen vier Byte breiten Unicode-Puffer und ein Latin-1-Byte wie 0xE9 verwendet. Als erledigt gilt die Aufgabe, wenn der resultierende Codepoint im Unicode-Bereich bleibt und die relevanten Tests bestehen.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Bug report
Potential Problem
In /Objects/unicodeobject.c in the PyUnicode_4BYTE_KIND branch https://github.com/python/cpython/blob/3.12/Objects/unicodeobject.c#L1922. A static analyzer has identified a genuine issue: *str is of type char (which is signed on x86/x64 architectures). Consequently, when Latin-1 bytes in the range 0x80–0xFF are cast to Py_UCS4, they undergo sign extension—for example, 0xE9 becomes 0xFFFFFFE9. This value exceeds MAX_UNICODE and violates the invariants of the str object. This code path can be triggered via the exported function _PyUnicodeWriter_WriteLatin1String when using a PyUnicode_4BYTE_KIND buffer (while not invoked internally by CPython itself, the issue can manifest in extensions). The fix is to introduce an intermediate cast to Py_UCS1
case PyUnicode_4BYTE_KIND: {
Py_UCS4 *start = (Py_UCS4 *)data + index;
Py_UCS4 *ucs4 = start;
for (; str < end; ++ucs4, ++str)
*ucs4 = (Py_UCS4)*str;
assert((ucs4 - start) <= PyUnicode_GET_LENGTH(unicode));
break;
}
default:
Py_UNREACHABLE();
}
}
Possible Solution
Add an intermediate cast to Py_UCS1:
*ucs4 = (Py_UCS4)(Py_UCS1)*str;
Found by Linux Verification Center (portal.linuxtesting.ru (https://portal.linuxtesting.ru/)) with SVACE.
Author D. Babushkin.
CPython versions tested on:
3.12
Operating systems tested on:
No response
- Vorherrschende Sprache
- Python
- Sterne
- 77.9k
- Forks
- 37.1k
- Ø Merge
- 17 Std. 19 Min.
- Gemergte PRs (30 T.)
- 679
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus python/cpython
-
build OS-unsupported OS-windows type-bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 60/100
Maintainer antworten meist innerhalb von 1 Tag
-
What's New in 3.12 credits the unstable C API tier to PEP 697 instead of PEP 689Evtl. vergeben @TheLouisMahdi hat das vor 4 Tagen übernommen. Offendocs
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 82/100
python/cpython#161078 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
OS-windows type-bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
Maintainer antworten meist innerhalb von 1 Tag
-
docs
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
python/cpython#161007 · 4 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
tests topic-profiling type-bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
python/cpython#160881 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
request-theme
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 78/100
LizardByte/ThemerrDB#9883 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 84/100
Project-MONAI/MONAI#9258 ·
Maintainer antworten meist innerhalb von 3 Tagen
-
catalog:deprecation
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 88/100
surendranb/free-inference#31 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
fritzprix/libr-agent#2612 ·
Maintainer antworten meist innerhalb von 1 Tag
-
needs-triage presubmit-gate
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
gke-labs/kube-agents#5001 ·
Maintainer antworten meist innerhalb von 1 Tag