Especially when executing commands that return a relatively lot of data in stdout quickly, proc_get_status() may return that command has terminated before everything has been read from pipes. Handle this case by continuing to perform non-blocking select on the process's streams until all remaining data has been read. Bug: 67870 Change-Id: I050292dbb76821f66a15f937bf3aaf4defe67687
20 lines
533 B
PHP
20 lines
533 B
PHP
<?php
|
|
|
|
/**
|
|
* @group GlobalFunctions
|
|
* @covers ::wfShellExec
|
|
*/
|
|
class WfShellExecTest extends MediaWikiTestCase {
|
|
public function testBug67870() {
|
|
$command = wfIsWindows()
|
|
// 333 = 331 + CRLF
|
|
? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
|
|
: 'printf "%-333333s" "*"';
|
|
|
|
// Test several times because it involves a race condition that may randomly succeed or fail
|
|
for ( $i = 0; $i < 10; $i++ ) {
|
|
$output = wfShellExec( $command );
|
|
$this->assertEquals( 333333, strlen( $output ) );
|
|
}
|
|
}
|
|
}
|