Windows CLI: get_ps_title() passes bytes to GetConsoleTitleW() instead of characters, overflowing the 260-wchar_t buffer
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 79/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Tech-Stack
- c
- Bereich
- cli, operating-systems
Rechercherichtung
Lies den Aufruf von GetConsoleTitleW() in sapi/cli/ps_title.c etwa in den Zeilen 407–436 und prüfe, wie die Pufferlänge übergeben wird. Sieh dir zunächst cli_get_process_title_basic.phpt und cli_process_title_windows.phpt an, die derzeit kurze Titel abdecken. Die Aufgabe ist abgeschlossen, wenn die API die Pufferkapazität in Zeichen erhält und ein langer Konsolentitel unter Windows ohne Absturz abgeschnitten wird.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Description
In sapi/cli/ps_title.c (~L407-436), wchar_t ps_buffer_w[MAX_PATH] is filled by GetConsoleTitleW(ps_buffer_w, (DWORD)sizeof(ps_buffer_w)). nSize is a count of characters, so 520 is passed for a buffer of 260 wchar_t; the API may write up to 1040 bytes. The clamp after the call acts on a different buffer. PHP itself rejects titles of 260+ characters in set_ps_title(), so the console title has to be set by another process on the same console.
The following code (run from a console):
import ctypes, subprocess
ctypes.windll.kernel32.SetConsoleTitleW("A" * 500)
r = subprocess.run([r"C:\php\php.exe", "-r", "echo strlen(cli_get_process_title());"])
print(hex(r.returncode & 0xFFFFFFFF))
Resulted in this output:
0xC0000409 (STATUS_STACK_BUFFER_OVERRUN)
Title length 10 and 259 work; 260 prints 259; 500 aborts.
But I expected this output instead: 259 (truncated title), no crash.
Fix: GetConsoleTitleW(ps_buffer_w, (DWORD)_countof(ps_buffer_w)). Existing tests (cli_get_process_title_basic.phpt, cli_process_title_windows.phpt) only use short titles.
PHP Version
PHP 8.7.0-dev (cli) (built: Oct 27 2026 17:51:17) (ZTS Visual C++ 2026 x64)
Zend Engine v4.7.0-dev (master @ 0af8a091eec28513a6a0b758bcb10b430ba6c6de)
Affects PHP-8.4/8.5 by source inspection (not run there).
Operating System
Windows 11 x64
- Vorherrschende Sprache
- C
- Sterne
- 41.7k
- Forks
- 8.5k
- Ø Merge
- 2 T. 10 Std.
- Gemergte PRs (30 T.)
- 158
Entwicklungsumgebung
- Kein Dockerfile und keine Docker-Compose-Datei
- Keine 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 php/php-src
-
fileinfo: built-in magic database php_magic_database is not aligned, breaks on strict-alignment CPUs (ARMv5, 32-bit)Evtl. vergeben @lazerg hat das heute übernommen. OffenBug Extension: fileinfo Status: Verified
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 73/100
Maintainer antworten meist innerhalb von 1 Tag
-
master: part of the mbstring bailout fix got lost in a mergeEvtl. vergeben @lazerg hat das vor 7 Tagen übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
Maintainer antworten meist innerhalb von 1 Tag
-
Bug Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 64/100
Maintainer antworten meist innerhalb von 1 Tag
-
quoted_printable_encode() produces lines longer than 76 characters for bytes 0xF5 to 0xFFEvtl. vergeben Ein verknüpfter Pull Request ist offen oder bereits gemergt. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
Maintainer antworten meist innerhalb von 1 Tag
-
Bug Status: Needs Triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 62/100
php/php-src#24196 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
InukaAsith/TwinDesk#84 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
CanadaHonk/porffor#426 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 65/100
FujiNetWIFI/fujinet-firmware#2221 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 77/100
raysan5/raylib.com#132 ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100