php / php/php-src

PTY read differences on Illumos

Offen
#19,919 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

Bug Extension: standard OS: Illumos SAPI: cli
Vorherrschende Sprache
C
Sterne
40.4k
Forks
8.1k
Ø Merge
2 T. 13 Std.
Gemergte PRs (30 T.)
96

Beschreibung

Description

When testing some other things on Illumos, I noticed that t/standard/tests/file/bug69442.phpt test hangs due to some pty incompatibility:

Truss output

    # truss /usr/local/bin/php ext/standard/tests/file/bug69442.phpt
execvex("/usr/local/bin/php", 0xFFFFFC7FFFDFCC68, 0xFFFFFC7FFFDFCC80, 0)  argc = 2
sysinfo(SI_MACHINE, "i86pc", 257)               = 6
mmap(0x00000000, 56, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FE2ED0000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FED070000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FED0F0000
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEEB70000
memcntl(0xFFFFFC7FEF399000, 88824, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEECD0000
memcntl(0x00400000, 1632728, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
resolvepath("/usr/lib/amd64/ld.so.1", "/lib/amd64/ld.so.1", 1023) = 18
resolvepath("/usr/local/bin/php", "/usr/local/bin/php", 1023) = 18
stat("/usr/local/bin/php", 0xFFFFFC7FFFDFC8B0)  = 0
open("/var/ld/64/ld.config", O_RDONLY)          Err#2 ENOENT
stat("/usr/ucblib/libresolv.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libresolv.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libresolv.so.2", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/lib/64/libresolv.so.2", "/lib/amd64/libresolv.so.2", 1023) = 25
open("/lib/64/libresolv.so.2", O_RDONLY)        = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEECD0CC0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF2C0000
memcntl(0xFFFFFC7FEF200000, 118392, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libproc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libproc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libproc.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/lib/64/libproc.so.1", "/lib/amd64/libproc.so.1", 1023) = 23
open("/lib/64/libproc.so.1", O_RDONLY)          = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF2C0C40, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF360000
memcntl(0xFFFFFC7FEF2F0000, 89320, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libm.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libm.so.2", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libm.so.2", 0xFFFFFC7FFFDFBC80)   = 0
resolvepath("/lib/64/libm.so.2", "/lib/amd64/libm.so.2", 1023) = 20
open("/lib/64/libm.so.2", O_RDONLY)             = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF360B58, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF370000
memcntl(0xFFFFFC7FEEEC0000, 81056, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libnsl.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libnsl.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libnsl.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/lib/64/libnsl.so.1", "/lib/amd64/libnsl.so.1", 1023) = 22
open("/lib/64/libnsl.so.1", O_RDONLY)           = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF370AB0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF2E0000
memcntl(0xFFFFFC7FEF0A0000, 186416, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libsocket.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libsocket.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libsocket.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/lib/64/libsocket.so.1", "/lib/amd64/libsocket.so.1", 1023) = 25
open("/lib/64/libsocket.so.1", O_RDONLY)        = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF2E0B28, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1A0000
memcntl(0xFFFFFC7FEF280000, 34808, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libgcc_s.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libgcc_s.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/usr/gcc/14/lib/amd64/libgcc_s.so.1", "/usr/gcc/14/lib/amd64/libgcc_s.so.1", 1023) = 35
open("/usr/gcc/14/lib/amd64/libgcc_s.so.1", O_RDONLY) = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1A0AB0, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1D0000
memcntl(0xFFFFFC7FEF040000, 40752, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/ucblib/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/14/lib/amd64/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libc.so.1", 0xFFFFFC7FFFDFBC80)   = 0
resolvepath("/lib/64/libc.so.1", "/lib/amd64/libc.so.1", 1023) = 20
open("/lib/64/libc.so.1", O_RDONLY)             = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1D0A60, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1F0000
memcntl(0xFFFFFC7FEECF0000, 445576, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/gcc/10/lib/amd64/libc.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/gcc/10/lib/amd64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/lib/64/libsaveargs.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/usr/lib/64/libsaveargs.so.1", "/usr/lib/amd64/libsaveargs.so.1", 1023) = 31
open("/usr/lib/64/libsaveargs.so.1", O_RDONLY)  = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF1D0E50, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF180000
memcntl(0xFFFFFC7FEF160000, 4456, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/gcc/10/lib/amd64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/lib/64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) Err#2 ENOENT
stat("/usr/lib/64/libdisasm.so.1", 0xFFFFFC7FFFDFBC80) = 0
resolvepath("/usr/lib/64/libdisasm.so.1", "/usr/lib/amd64/libdisasm.so.1", 1023) = 29
open("/usr/lib/64/libdisasm.so.1", O_RDONLY)    = 3
mmapobj(3, MMOBJ_INTERPRET, 0xFFFFFC7FEF180D18, 0xFFFFFC7FFFDFBBDC, 0x00000000) = 0
close(3)                                        = 0
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF1C0000
memcntl(0xFFFFFC7FEEF90000, 106784, MC_ADVISE, MADV_WILLNEED, 0, 0) = 0
stat("/usr/gcc/10/lib/amd64/libnsl.so.1", 0xFFFFFC7FFFDFB690) Err#2 ENOENT
stat("/usr/gcc/10/lib/amd64/libsocket.so.1", 0xFFFFFC7FFFDFB7C0) Err#2 ENOENT
mmap(0x00000000, 4096, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON, 4294967295, 0) = 0xFFFFFC7FEF090000
mmap(0x00010000, 24576, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, -1, 0) = 0xFFFFFC7FEEF70000
getcontext(0xFFFFFC7FFFDFC3D0)
getrlimit(RLIMIT_STACK, 0xFFFFFC7FFFDFC3C0)     = 0
getpid()                                        = 11858 [11857]
lwp_private(0, 0, 0xFFFFFC7FEEF72A40)           = 0x00000000
getrandom("91F0\0ABB9 Warning: Undefined array key "TEST_PHP_EXECUTABLE" in /home/jakub/prog/php/master/ext/standard/tests/file/bug69442.phpt on line 16
write(1, "\n W a r n i n g : U n".., 132) = 132
access("/usr/bin/sh", X_OK) = 0
open("/dev/null", O_RDWR) = 4
fcntl(4, F_GETFD, 0xFFFFFE0BDD07CBE0) = 0
pipe([5,6], 0) = 0
access("/usr/bin/sh", X_OK) = 0
lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0xFFFFFFFF, 0x000003FF, 0x00000000) = 0x00000000 [0x00000000]
vforkx(FORK_NOSIGCHLD|FORK_WAITPID) = 11859
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
close(6) = 0
fcntl(5, F_DUP2FD, 0x00000004) = 4
close(5) = 0
read(4, " s h : - d : n o t ".., 8192) = 46
read(4, 0xFFFFFC7FEE694000, 8192) = 0
lseek(4, 0, SEEK_CUR) Err#29 ESPIPE
close(4) = 0
waitid(P_PID, 11859, 0xFFFFFC7FFFDFA8F0, WEXITED|WTRAPPED) = 0
unlink("/var/tmp/bug69442a6htqkqpvjl8bLkaqkx") = 0
--FILE--
write(1, " - - F I L E - -\n", 9) = 9
open("/dev/ptmx", O_RDWR|O_NOCTTY) = 4
ioctl(4, I_STR, 0xFFFFFC7FFFDFA8E0) = 0
fstat(4, 0xFFFFFC7FFFDFA900) = 0
getuid() = 0 [0]
getuid() = 0 [0]
getpid() = 11858 [11857]
open("/proc/11858/psinfo", O_RDONLY) = 5
read(5, "\0\0\00201\0\0\0 R .\0\0".., 416) = 416
close(5) = 0
mmap(0x00010000, 65536, PROT_READ|PROT_WRITE|PROT_EXEC, MAP_PRIVATE|MAP_ANON|MAP_ALIGN, 4294967295, 0) = 0xFFFFFC7FEECB0000
getuid() = 0 [0]
getuid() = 0 [0]
open("/var/run/name_service_door", O_RDONLY) = 5
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
door_info(5, 0xFFFFFC7FEEE7DC00) = 0
door_call(5, 0xFFFFFC7FFFDFA5E0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA9C0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA9D0) = 0
ioctl(4, I_STR, 0xFFFFFC7FFFDFA8D0) = 0
fstat(4, 0xFFFFFC7FFFDFA8F0) = 0
access("/dev/pts/3", F_OK) = 0
open("/dev/pts/3", O_RDONLY|O_NOCTTY) = 6
ioctl(6, I_PUSH, "ptem") = 0
fcntl(6, F_DUPFD, 0x00000000) = 7
fcntl(4, F_DUPFD, 0x00000000) = 8
fcntl(6, F_DUPFD, 0x00000000) = 9
fcntl(4, F_DUPFD, 0x00000000) = 10
fcntl(6, F_DUPFD, 0x00000000) = 11
fcntl(4, F_DUPFD, 0x00000000) = 12
pipe([13,14], 0) = 0
fcntl(13, F_SETFD, FD_CLOEXEC) = 0
lwp_sigmask(SIG_SETMASK, 0xFFBFFEFF, 0xFFFFFFFF, 0x000003FF, 0x00000000) = 0x00000000 [0x00000000]
vforkx(0) = 11860
lwp_sigmask(SIG_SETMASK, 0x00000000, 0x00000000, 0x00000000, 0x00000000) = 0xFFBFFEFF [0xFFFFFFFF]
close(7) = 0
fstat(8, 0xFFFFFC7FEE68A3B8) = 0
close(9) = 0
fstat(10, 0xFFFFFC7FEE68A498) = 0
close(11) = 0
fstat(12, 0xFFFFFC7FEE68A578) = 0
close(14) = 0
fstat(13, 0xFFFFFC7FEE68A658) = 0
close(4) = 0
close(6) = 0
read(8, 0xFFFFFC7FEE699000, 8192) = 0
Received signal #18, SIGCLD, in read() [default]
siginfo: SIGCLD CLD_EXITED pid=11860 status=0x002A
read(8, 0xFFFFFC7FEE699000, 8192) (sleeping...)
^[[B^[[B^[[Aq^C Received signal #2, SIGINT, in read() [caught]

PHP Version
PHP 8.3
Operating System

OmniOS r151054

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Reproduziere den Hänger in t/standard/tests/file/bug69442.phpt auf Illumos und verwende die enthaltene truss-Ausgabe als Ausgangspunkt für die Untersuchung. Verfolge das von diesem Test erreichte PTY-Leseverhalten und überprüfe anschließend, dass der Test auf Illumos ohne Hänger abgeschlossen wird.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Muss geklärt werden
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

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