瀏覽代碼

SVN: hide passwords for debug output

Stephan Vock 5 年之前
父節點
當前提交
8da046e4e9
共有 2 個文件被更改,包括 18 次插入3 次删除
  1. 1 0
      src/Composer/Util/ProcessExecutor.php
  2. 17 3
      tests/Composer/Test/Util/ProcessExecutorTest.php

+ 1 - 0
src/Composer/Util/ProcessExecutor.php

@@ -51,6 +51,7 @@ class ProcessExecutor
 
                 return '://'.$m['user'].':***@';
             }, $command);
+            $safeCommand = preg_replace("{--password (.*[^\\\\]\') }", '--password \'***\' ', $safeCommand);
             $this->io->writeError('Executing command ('.($cwd ?: 'CWD').'): '.$safeCommand);
         }
 

+ 17 - 3
tests/Composer/Test/Util/ProcessExecutorTest.php

@@ -61,11 +61,25 @@ class ProcessExecutorTest extends TestCase
         ProcessExecutor::setTimeout(60);
     }
 
-    public function testHidePasswords()
+    /**
+     * @dataProvider hidePasswordProvider
+     */
+    public function testHidePasswords($command, $expectedCommandOutput)
     {
         $process = new ProcessExecutor($buffer = new BufferIO('', StreamOutput::VERBOSITY_DEBUG));
-        $process->execute('echo https://foo:bar@example.org/ && echo http://foo@example.org && echo http://abcdef1234567890234578:x-oauth-token@github.com/', $output);
-        $this->assertEquals('Executing command (CWD): echo https://foo:***@example.org/ && echo http://foo@example.org && echo http://***:***@github.com/', trim($buffer->getOutput()));
+        $process->execute($command, $output);
+        $this->assertEquals('Executing command (CWD): ' . $expectedCommandOutput, trim($buffer->getOutput()));
+    }
+
+    public function hidePasswordProvider()
+    {
+        return array(
+            array('echo https://foo:bar@example.org/', 'echo https://foo:***@example.org/'),
+            array('echo http://foo@example.org', 'echo http://foo@example.org'),
+            array('echo http://abcdef1234567890234578:x-oauth-token@github.com/', 'echo http://***:***@github.com/'),
+            array("svn ls --verbose --non-interactive  --username 'foo' --password 'bar'  'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive  --username 'foo' --password '***'  'https://foo.example.org/svn/'"),
+            array("svn ls --verbose --non-interactive  --username 'foo' --password 'bar \'bar'  'https://foo.example.org/svn/'", "svn ls --verbose --non-interactive  --username 'foo' --password '***'  'https://foo.example.org/svn/'"),
+        );
     }
 
     public function testDoesntHidePorts()