Commit 2be812d
committed
This PR was merged into the 5.4 branch.
Discussion
----------
[Console] Suppress `proc_open` errors within `Terminal::readFromProcess`
| Q | A
| ------------- | ---
| Branch? | 5.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Issues |
| License | MIT
When instantiating `SymfonyStyle` in a command it will try to determine the maximum width of the current console interface.
https://github.com/symfony/symfony/blob/6687e4ea35f45ebd73fb0315938103628cfb13a0/src/Symfony/Component/Console/Style/SymfonyStyle.php#L53
This will execute `stty -a | grep columns` down the line. Access to `stty` might be disallowed however, resulting in the following error:
```
ErrorException: Warning: proc_open(): Exec failed: Permission denied
symfony#16 /vendor/symfony/console/Terminal.php(220): Symfony\Component\Console\Terminal::readFromProcess
symfony#15 /vendor/symfony/console/Terminal.php(204): Symfony\Component\Console\Terminal::getSttyColumns
symfony#14 /vendor/symfony/console/Terminal.php(170): Symfony\Component\Console\Terminal::initDimensionsUsingStty
symfony#13 /vendor/symfony/console/Terminal.php(153): Symfony\Component\Console\Terminal::initDimensions
symfony#12 /vendor/symfony/console/Terminal.php(94): Symfony\Component\Console\Terminal::getWidth
symfony#11 /vendor/symfony/console/Style/SymfonyStyle.php(55): Symfony\Component\Console\Style\SymfonyStyle::__construct
symfony#10 /vendor/symfony/messenger/Command/ConsumeMessagesCommand.php(136): Symfony\Component\Messenger\Command\ConsumeMessagesCommand::interact
symfony#9 /vendor/symfony/console/Command/Command.php(311): Symfony\Component\Console\Command\Command::run
```
(Stack Trace actually from Symfony 6)
The phpDoc of `Terminal::getSttyColumns` states
> Runs and parses stty -a if it's available, _suppressing any error output_.
The latter might refer to `['suppress_errors' => true]` (though I am not sure) - which is a Windows only functionality. In any case, since `Terminal::readFromProcess` already checks for
```php
if (!$process = proc_open(…)) {
return null;
}
```
and
```php
if (!\is_resource($process)) {
return null;
}
```
upstream in Symfony 6/7, indicating that `proc_open` might fail - this error can additionally be suppressed using `@`. Besides, `Process::start` also uses ``@proc_open`` (added in symfony@099481f "Prevent warning in proc_open()").
Commits
-------
575249a suppress proc_open errors
1 file changed
+1
-1
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
158 | 158 | | |
159 | 159 | | |
160 | 160 | | |
161 | | - | |
| 161 | + | |
162 | 162 | | |
163 | 163 | | |
164 | 164 | | |
| |||
0 commit comments