public function testCommandWithInjectionInArgument()
 {
     $path = 'path/to/any/directory/with/file.tes';
     $builder = new CommandBuilder();
     $cmd = $builder->setCommand(new Command('git'))->addArgument(new Argument('log'))->addFlag(new Flag('--color'))->addFlag(new Flag('-p'))->addFlag(new Flag('-1'))->addArgument(new Argument('db3b7f6f645; rm -rf /etc'))->addFlag(new Flag('--'))->addArgument(new Argument('./' . basename($path)))->build();
     self::assertEquals("git 'log' --color -p -1 'db3b7f6f645\\; rm -rf /etc' -- './file.tes'", $cmd);
 }
 /**
  * Display git commit(s) log(s)
  * 
  * Todo: refactoring..
  */
 public function actionHistory()
 {
     $builder = new CommandBuilder();
     $hash = \Yii::$app->request->get('c');
     $pathToJson = $this->module->swaggerPath;
     // set executable external!!!
     // @chmod(__DIR__ . '/../ansi2html.sh', 0755);
     if ($hash && preg_match('#[a-z0-9]{4,40}#', $hash)) {
         $commands = [];
         $commands[] = $builder->setCommand(new Command('cd'))->addArgument(new Argument(dirname($pathToJson)))->build();
         $commands[] = $builder->setCommand(new Command('git'))->addArgument(new Argument('log'))->addFlag(new Flag('--color'))->addFlag(new Flag('-p'))->addFlag(new Flag('-1'))->addArgument(new Argument($hash))->addFlag(new Flag('--'))->addArgument(new Argument('./' . basename($pathToJson)))->build();
         $result = shell_exec(implode('; ', $commands) . ' | ' . __DIR__ . '/../ansi2html.sh');
         echo $result;
         \Yii::$app->end();
     }
     $format = '<tr class="log-item">';
     $format .= '<td class="log-hash">%h</td>';
     $format .= '<td class="log-date">%ad</td>';
     $format .= '<td class="log-short-comment">%s</td>';
     $format .= '<td class="log-full-comment">%b</td>';
     $format .= '</tr>';
     $commands = [];
     $commands[] = $builder->setCommand(new Command('cd'))->addArgument(new Argument(dirname($pathToJson)))->build();
     $commands[] = $builder->setCommand(new Command('git'))->addArgument(new Argument('log'))->addFlag(new Flag('--color'))->addOption(new Option('--pretty', 'format:' . $format))->addFlag(new Flag('--no-merges'))->addFlag(new Flag('-10'))->addFlag(new Flag('--'))->addArgument(new Argument('./' . basename($pathToJson)))->build();
     echo '<table>';
     echo stripslashes(shell_exec(implode('; ', $commands)));
     echo '</table>';
     \Yii::$app->end();
 }