php / php/php-src

PTY read differences on Illumos

Ouverte
#19,919 0 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Bug Extension: standard OS: Illumos SAPI: cli
Langage dominant
C
Étoiles
40.4k
Forks
8.2k
Merge moyen
2 j 13 h
PR mergées (30 j)
96

Description

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

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Reproduisez le blocage dans t/standard/tests/file/bug69442.phpt sur Illumos et utilisez la sortie de truss incluse comme point de départ des éléments de preuve. Suivez le comportement de lecture du PTY atteint par ce test, puis vérifiez que le test se termine sans blocage sur Illumos.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
c
Domaine
operating-systems
Type d'issue
Bug
Difficulté
4/5
Temps estimé
3-5 jours
Activité
À l'abandon
Clarté
À clarifier
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.