Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

Windows CLI: get_ps_title() passes bytes to GetConsoleTitleW() instead of characters, overflowing the 260-wchar_t buffer

Offen Anfängerfreundlich
#25,009 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@lazerg arbeitet bereits daran.

Seit 28.10.2026.

  • #25011 von @lazerg — offen

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

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

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus php/php-src

Alle Issues in php/php-src

Ähnliche Issues

Weitere Issues zu C

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.