├── .gitignore
├── demo.php
├── bin
└── php-security-scanner
├── test
├── code
│ ├── mysql_query.php
│ └── mysql_query_func_argument.php
└── PHPSecurityScanner
│ └── EndToEndTest.php
├── phpunit.xml.dist
├── README.md
├── composer.json
├── LICENSE
├── .php_cs
├── lib
└── PHPSecurityScanner
│ ├── Command
│ └── Scan.php
│ └── Rule
│ └── MySQLQuery.php
└── composer.lock
/.gitignore:
--------------------------------------------------------------------------------
1 | vendor
2 | test.php
3 |
--------------------------------------------------------------------------------
/demo.php:
--------------------------------------------------------------------------------
1 | = 0; $i--) {
9 | $file = __DIR__ . str_repeat('/..', $i) . "/vendor/autoload.php";
10 | if (file_exists($file)) {
11 | $found = true;
12 | require_once $file;
13 | break;
14 | }
15 | }
16 |
17 | if (!$found) {
18 | fwrite(STDERR, 'You need to setup the project dependencies using Composer' . PHP_EOL);
19 | die(1);
20 | }
21 |
22 | $app = new \Cilex\Application("SecurityScanner");
23 | $app->command(new \PHPSecurityScanner\Command\Scan);
24 | $app->run();
25 |
26 |
--------------------------------------------------------------------------------
/test/code/mysql_query.php:
--------------------------------------------------------------------------------
1 |
16 | EOF;
17 |
18 | return [
19 | $code,
20 | [
21 | [
22 | "line" => 3,
23 | "message" => "Possible SQL Injection found in call to mysql_query() argument number 1",
24 | ]
25 | ]
26 | ];
--------------------------------------------------------------------------------
/test/code/mysql_query_func_argument.php:
--------------------------------------------------------------------------------
1 |
21 | EOF;
22 |
23 | return [
24 | $code,
25 | [
26 | [
27 | "line" => 4,
28 | "message" => "Possible SQL Injection found in call to foo() argument number 1",
29 | ]
30 | ]
31 | ];
--------------------------------------------------------------------------------
/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
15 | ./test/
16 |
17 |
18 |
19 |
20 |
21 | ./lib/PHPSecurityScanner/
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # A Static Analyzer Security Scanner (for PHP)
2 |
3 | This detects passing unsafe variables to unsafe function arguments.
4 |
5 | ## Usage:
6 |
7 | bin/php-security-scanner scan path/to/files
8 |
9 | It will search through all files for security issues.
10 |
11 | ## Example
12 |
13 | Given the following code:
14 |
15 | ```php
16 |
27 | ```
28 |
29 | Running the scanner on this file will identify like 4 as an error, with the message:
30 |
31 | > Possible SQL Injection found in call to foo() argument number 1
32 |
33 | ## Supported vulnerability scanners:
34 |
35 | Currently, only `mysql_query` is supported, and only in limited situations.
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ircmaxell/php-security-scanner",
3 | "description": "A Static Security Scanner for PHP",
4 | "license": "MIT",
5 | "authors": [
6 | {
7 | "name": "Anthony Ferrara",
8 | "email": "ircmaxell@gmail.com"
9 | }
10 | ],
11 | "require": {
12 | "php": ">=5.5",
13 | "ircmaxell/php-cfg": "dev-master",
14 | "ircmaxell/php-types": "dev-master",
15 | "ircmaxell/tuli": "dev-master",
16 | "cilex/cilex": "1.*"
17 | },
18 | "require-dev": {
19 | "phpunit/phpunit": "^4.7",
20 | "fabpot/php-cs-fixer": "1.*"
21 | },
22 | "minimum-stability": "dev",
23 | "autoload": {
24 | "psr-4": {
25 | "PHPSecurityScanner\\": "lib/PHPSecurityScanner/"
26 | }
27 | },
28 | "bin": [
29 | "bin/php-security-scanner"
30 | ]
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015 Anthony Ferrara
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in
13 | all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 | THE SOFTWARE.
22 |
--------------------------------------------------------------------------------
/.php_cs:
--------------------------------------------------------------------------------
1 | level(Symfony\CS\FixerInterface::NONE_LEVEL)
14 | ->fixers([
15 | 'header_comment',
16 | 'linefeed',
17 | 'indentation',
18 | 'elseif',
19 | 'line_after_namespace',
20 | 'lowercase_constants',
21 | 'lowercase_keywords',
22 | 'method_argument_space',
23 | 'single_blank_line_before_namespace',
24 | 'ordered_use',
25 | 'short_array_syntax',
26 | 'single_line_after_imports',
27 | 'visibility',
28 | 'trailing_spaces',
29 | 'concat_with_spaces',
30 | 'align_double_arrow',
31 | 'unused_use',
32 | 'ternary_spaces',
33 | 'remove_leading_slash_use',
34 | 'remove_lines_between_uses',
35 | 'phpdoc_indent',
36 | 'phpdoc_no_access',
37 | 'phpdoc_params',
38 | 'phpdoc_scalar',
39 | 'phpdoc_separation',
40 | 'phpdoc_trim',
41 | 'phpdoc_var_without_name',
42 | 'phpdoc_order',
43 | 'no_empty_lines_after_phpdocs',
44 | ])
45 | ->finder(
46 | Symfony\CS\Finder\DefaultFinder::create()
47 | ->in(__DIR__ . "/lib")
48 | ->in(__DIR__ . "/bin")
49 | ->in(__DIR__ . "/test")
50 | )
51 | ;
52 |
--------------------------------------------------------------------------------
/lib/PHPSecurityScanner/Command/Scan.php:
--------------------------------------------------------------------------------
1 | setName('scan')
29 | ->setDescription('Scan the provided files');
30 | }
31 |
32 | protected function execute(InputInterface $input, OutputInterface $output) {
33 | $state = parent::execute($input, $output);
34 | $this->loadRules();
35 | $errors = [];
36 | foreach ($this->rules as $rule) {
37 | echo "Executing rule: " . $rule->getName() . "\n";
38 | $errors = array_merge($errors, $rule->execute($state));
39 | }
40 | foreach ($errors as $error) {
41 | $this->emitError($error[0], $error[1]);
42 | }
43 | }
44 |
45 |
46 | public function loadRules() {
47 | $this->rules[] = new PHPSecurityScanner\Rule\MySQLQuery;
48 | }
49 |
50 | protected function emitError($msg, Op $op) {
51 | echo $msg;
52 | echo " in ";
53 | echo $op->getFile() . " on line " . $op->getLine();
54 | echo "\n";
55 | }
56 |
57 | }
--------------------------------------------------------------------------------
/test/PHPSecurityScanner/EndToEndTest.php:
--------------------------------------------------------------------------------
1 | getExtension() === 'php';
26 | }
27 | );
28 | $tests = [];
29 | foreach ($it as $file) {
30 | $tests[] = array_merge([basename($file)], require($file));
31 | }
32 | return $tests;
33 | }
34 |
35 | private $analyzer;
36 | private $parser;
37 | private $traverser;
38 |
39 | public function setUp() {
40 | $this->analyzer = new Command\Scan;
41 | $this->parser = new CFGParser((new ParserFactory)->create(ParserFactory::PREFER_PHP7));
42 | $this->traverser = new Traverser;
43 | $this->traverser->addVisitor(new Visitor\Simplifier);
44 | }
45 |
46 | /**
47 | * @dataProvider provideTest
48 | */
49 | public function testAll($file, $code, $expected) {
50 | $blocks = [$this->traverser->traverse($this->parser->parse($code, "file.php"))];
51 | ob_start();
52 | $components = $this->analyzer->analyzeGraphs($blocks);
53 | $rules = [];
54 | $rules[] = new Rule\MySQLQuery;
55 | $errors = [];
56 | foreach ($rules as $rule) {
57 | $errors = array_merge($errors, $rule->execute($components));
58 | }
59 | $results = [];
60 | foreach ($errors as $tmp) {
61 | $results[] = [
62 | "line" => $tmp[1]->getLine(),
63 | "message" => $tmp[0],
64 | ];
65 | }
66 | $output = ob_get_clean();
67 | $sort = function($a, $b) {
68 | if ($a['line'] !== $b['line']) {
69 | return $a['line'] - $b['line'];
70 | }
71 | return strcmp($a['message'], $b['message']);
72 | };
73 | usort($expected, $sort);
74 | usort($results, $sort);
75 | $this->assertEquals($expected, $results);
76 | }
77 |
78 | }
--------------------------------------------------------------------------------
/lib/PHPSecurityScanner/Rule/MySQLQuery.php:
--------------------------------------------------------------------------------
1 | callFinder->getCallsForFunction($func) as $call) {
33 |
34 | if (!$this->processQueryArg($call[0]->args[$argNum])) {
35 | $errors[] = ["Possible SQL Injection found in call to {$func}() argument number {$printableArgNum}", $call[0]];
36 | }
37 | if ($call[1]) {
38 | foreach ($call[1]->getParams() as $i => $param) {
39 | if ($param->getAttribute("unsafe", false) && !isset($checked[$call[1]->name->value])) {
40 | $toCheck[] = [$call[1]->name->value, $i];
41 | }
42 | }
43 | }
44 | }
45 | }
46 | return $errors;
47 | }
48 |
49 | private function processQueryArg(Operand $arg) {
50 | if ($arg instanceof Operand\Literal) {
51 | // Literal queries are always OK
52 | return true;
53 | }
54 | // Otherwise, we need to look up where the arg came from
55 | $i = 0;
56 | foreach ($arg->ops as $prev) {
57 | $i++;
58 | if (!$this->processQueryArgOp($prev)) {
59 | return false;
60 | }
61 | }
62 | if ($i > 0) {
63 | return true;
64 | }
65 | // We don't know the source
66 | return false;
67 | }
68 |
69 | private function processQueryArgOp(Op $op) {
70 | static $seen;
71 | if ($seen === null) {
72 | $seen = new \SplObjectStorage;
73 | }
74 | if ($seen->contains($op)) {
75 | return $seen[$op];
76 | }
77 | $seen[$op] = false;
78 | switch ($op->getType()) {
79 | case 'Expr_ArrayDimFetch':
80 | return $seen[$op] = $this->processQueryArg($op->var);
81 | case 'Expr_Assign':
82 | return $seen[$op] = $this->processQueryArg($op->expr);
83 | case 'Expr_ConcatList':
84 | foreach ($op->list as $el) {
85 | if (!$this->processQueryArg($el)) {
86 | return $seen[$op] = false;
87 | }
88 | }
89 | return $seen[$op] = true;
90 | case 'Expr_BinaryOp_Concat':
91 | if (!$this->processQueryArg($op->left)) {
92 | return $seen[$op] = false;
93 | }
94 | if (!$this->processQueryArg($op->right)) {
95 | return $seen[$op] = false;
96 | }
97 | return $seen[$op] = true;
98 | case 'Expr_FuncCall':
99 | if ($op->name instanceof Operand\Literal && $op->name->value === "mysql_real_escape_string") {
100 | return $seen[$op] = true;
101 | }
102 | return $seen[$op] = false;
103 | case 'Expr_Param':
104 | $unsafe = true;
105 | $op->setAttribute("unsafe", $unsafe);
106 | return $seen[$op] = true;
107 | case 'Phi':
108 | // assume it's safe
109 | $seen[$op] = true;
110 | foreach ($op->vars as $var) {
111 | if (!$this->processQueryArg($var)) {
112 | return $seen[$op] = false;
113 | }
114 | }
115 | return $seen[$op] = true;
116 | default:
117 | throw new \RuntimeException("Unknown OP Type: " . $op->getType());
118 | }
119 |
120 | }
121 |
122 | }
--------------------------------------------------------------------------------
/composer.lock:
--------------------------------------------------------------------------------
1 | {
2 | "_readme": [
3 | "This file locks the dependencies of your project to a known state",
4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 | "This file is @generated automatically"
6 | ],
7 | "hash": "b6398288d4d7d61afec2254d45e1fad1",
8 | "packages": [
9 | {
10 | "name": "cilex/cilex",
11 | "version": "1.1.0",
12 | "source": {
13 | "type": "git",
14 | "url": "https://github.com/Cilex/Cilex.git",
15 | "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5"
16 | },
17 | "dist": {
18 | "type": "zip",
19 | "url": "https://api.github.com/repos/Cilex/Cilex/zipball/7acd965a609a56d0345e8b6071c261fbdb926cb5",
20 | "reference": "7acd965a609a56d0345e8b6071c261fbdb926cb5",
21 | "shasum": ""
22 | },
23 | "require": {
24 | "cilex/console-service-provider": "1.*",
25 | "php": ">=5.3.3",
26 | "pimple/pimple": "~1.0",
27 | "symfony/finder": "~2.1",
28 | "symfony/process": "~2.1"
29 | },
30 | "require-dev": {
31 | "phpunit/phpunit": "3.7.*",
32 | "symfony/validator": "~2.1"
33 | },
34 | "suggest": {
35 | "monolog/monolog": ">=1.0.0",
36 | "symfony/validator": ">=1.0.0",
37 | "symfony/yaml": ">=1.0.0"
38 | },
39 | "type": "library",
40 | "extra": {
41 | "branch-alias": {
42 | "dev-master": "1.0-dev"
43 | }
44 | },
45 | "autoload": {
46 | "psr-0": {
47 | "Cilex": "src/"
48 | }
49 | },
50 | "notification-url": "https://packagist.org/downloads/",
51 | "license": [
52 | "MIT"
53 | ],
54 | "authors": [
55 | {
56 | "name": "Mike van Riel",
57 | "email": "mike.vanriel@naenius.com"
58 | }
59 | ],
60 | "description": "The PHP micro-framework for Command line tools based on the Symfony2 Components",
61 | "homepage": "http://cilex.github.com",
62 | "keywords": [
63 | "cli",
64 | "microframework"
65 | ],
66 | "time": "2014-03-29 14:03:13"
67 | },
68 | {
69 | "name": "cilex/console-service-provider",
70 | "version": "1.0.0",
71 | "source": {
72 | "type": "git",
73 | "url": "https://github.com/Cilex/console-service-provider.git",
74 | "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e"
75 | },
76 | "dist": {
77 | "type": "zip",
78 | "url": "https://api.github.com/repos/Cilex/console-service-provider/zipball/25ee3d1875243d38e1a3448ff94bdf944f70d24e",
79 | "reference": "25ee3d1875243d38e1a3448ff94bdf944f70d24e",
80 | "shasum": ""
81 | },
82 | "require": {
83 | "php": ">=5.3.3",
84 | "pimple/pimple": "1.*@dev",
85 | "symfony/console": "~2.1"
86 | },
87 | "require-dev": {
88 | "cilex/cilex": "1.*@dev",
89 | "silex/silex": "1.*@dev"
90 | },
91 | "type": "library",
92 | "extra": {
93 | "branch-alias": {
94 | "dev-master": "1.0-dev"
95 | }
96 | },
97 | "autoload": {
98 | "psr-0": {
99 | "Cilex\\Provider\\Console": "src"
100 | }
101 | },
102 | "notification-url": "https://packagist.org/downloads/",
103 | "license": [
104 | "MIT"
105 | ],
106 | "authors": [
107 | {
108 | "name": "Beau Simensen",
109 | "email": "beau@dflydev.com",
110 | "homepage": "http://beausimensen.com"
111 | },
112 | {
113 | "name": "Mike van Riel",
114 | "email": "mike.vanriel@naenius.com"
115 | }
116 | ],
117 | "description": "Console Service Provider",
118 | "keywords": [
119 | "cilex",
120 | "console",
121 | "pimple",
122 | "service-provider",
123 | "silex"
124 | ],
125 | "time": "2012-12-19 10:50:58"
126 | },
127 | {
128 | "name": "ircmaxell/php-cfg",
129 | "version": "dev-master",
130 | "source": {
131 | "type": "git",
132 | "url": "https://github.com/ircmaxell/php-cfg.git",
133 | "reference": "8fc8dbbfb98a509aecbc0ca3877901e785f1c1e2"
134 | },
135 | "dist": {
136 | "type": "zip",
137 | "url": "https://api.github.com/repos/ircmaxell/php-cfg/zipball/8fc8dbbfb98a509aecbc0ca3877901e785f1c1e2",
138 | "reference": "8fc8dbbfb98a509aecbc0ca3877901e785f1c1e2",
139 | "shasum": ""
140 | },
141 | "require": {
142 | "nikic/php-parser": "dev-master",
143 | "php": ">=5.5",
144 | "phpdocumentor/graphviz": "dev-master"
145 | },
146 | "require-dev": {
147 | "fabpot/php-cs-fixer": "1.*",
148 | "phpunit/phpunit": "^4.7"
149 | },
150 | "type": "library",
151 | "autoload": {
152 | "psr-4": {
153 | "PHPCfg\\": "lib/PHPCfg/"
154 | }
155 | },
156 | "notification-url": "https://packagist.org/downloads/",
157 | "license": [
158 | "BSD"
159 | ],
160 | "authors": [
161 | {
162 | "name": "Anthony Ferrara",
163 | "email": "ircmaxell@gmail.com"
164 | }
165 | ],
166 | "description": "A Control Flow Graph implementation for PHP",
167 | "time": "2015-07-29 16:58:44"
168 | },
169 | {
170 | "name": "ircmaxell/php-types",
171 | "version": "dev-master",
172 | "source": {
173 | "type": "git",
174 | "url": "https://github.com/ircmaxell/php-types.git",
175 | "reference": "e73cb3039d6a57cb17f0b91a9b9210ef12a50cfe"
176 | },
177 | "dist": {
178 | "type": "zip",
179 | "url": "https://api.github.com/repos/ircmaxell/php-types/zipball/e73cb3039d6a57cb17f0b91a9b9210ef12a50cfe",
180 | "reference": "e73cb3039d6a57cb17f0b91a9b9210ef12a50cfe",
181 | "shasum": ""
182 | },
183 | "require": {
184 | "ircmaxell/php-cfg": "dev-master",
185 | "php": ">=5.5"
186 | },
187 | "require-dev": {
188 | "fabpot/php-cs-fixer": "1.*",
189 | "phpunit/phpunit": "^4.7"
190 | },
191 | "type": "library",
192 | "autoload": {
193 | "psr-4": {
194 | "PHPTypes\\": "lib/PHPTypes/"
195 | }
196 | },
197 | "notification-url": "https://packagist.org/downloads/",
198 | "license": [
199 | "MIT"
200 | ],
201 | "authors": [
202 | {
203 | "name": "Anthony Ferrara",
204 | "email": "ircmaxell@gmail.com"
205 | }
206 | ],
207 | "description": "A PHP CFG Type Inference / Reconstruction Engine",
208 | "time": "2015-07-28 17:11:16"
209 | },
210 | {
211 | "name": "ircmaxell/tuli",
212 | "version": "dev-master",
213 | "source": {
214 | "type": "git",
215 | "url": "https://github.com/ircmaxell/Tuli.git",
216 | "reference": "f647b5a14fd4877463c8b0ab2e244bc07994061e"
217 | },
218 | "dist": {
219 | "type": "zip",
220 | "url": "https://api.github.com/repos/ircmaxell/Tuli/zipball/f647b5a14fd4877463c8b0ab2e244bc07994061e",
221 | "reference": "f647b5a14fd4877463c8b0ab2e244bc07994061e",
222 | "shasum": ""
223 | },
224 | "require": {
225 | "cilex/cilex": "1.*",
226 | "ircmaxell/php-cfg": "dev-master",
227 | "ircmaxell/php-types": "dev-master",
228 | "php": ">=5.5"
229 | },
230 | "require-dev": {
231 | "fabpot/php-cs-fixer": "1.*",
232 | "phpunit/phpunit": "^4.7"
233 | },
234 | "bin": [
235 | "bin/tuli"
236 | ],
237 | "type": "library",
238 | "autoload": {
239 | "psr-4": {
240 | "Tuli\\": "lib/Tuli/"
241 | }
242 | },
243 | "notification-url": "https://packagist.org/downloads/",
244 | "license": [
245 | "BSD"
246 | ],
247 | "authors": [
248 | {
249 | "name": "Anthony Ferrara",
250 | "email": "ircmaxell@gmail.com"
251 | }
252 | ],
253 | "description": "A Static Analyzer for PHP",
254 | "time": "2015-07-29 16:56:40"
255 | },
256 | {
257 | "name": "nikic/php-parser",
258 | "version": "dev-master",
259 | "source": {
260 | "type": "git",
261 | "url": "https://github.com/nikic/PHP-Parser.git",
262 | "reference": "e0a75ededaecccee2f083f951f4611ef95f6a562"
263 | },
264 | "dist": {
265 | "type": "zip",
266 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/e0a75ededaecccee2f083f951f4611ef95f6a562",
267 | "reference": "e0a75ededaecccee2f083f951f4611ef95f6a562",
268 | "shasum": ""
269 | },
270 | "require": {
271 | "ext-tokenizer": "*",
272 | "php": ">=5.4"
273 | },
274 | "type": "library",
275 | "extra": {
276 | "branch-alias": {
277 | "dev-master": "2.0-dev"
278 | }
279 | },
280 | "autoload": {
281 | "files": [
282 | "lib/bootstrap.php"
283 | ]
284 | },
285 | "notification-url": "https://packagist.org/downloads/",
286 | "license": [
287 | "BSD-3-Clause"
288 | ],
289 | "authors": [
290 | {
291 | "name": "Nikita Popov"
292 | }
293 | ],
294 | "description": "A PHP parser written in PHP",
295 | "keywords": [
296 | "parser",
297 | "php"
298 | ],
299 | "time": "2015-07-14 19:13:42"
300 | },
301 | {
302 | "name": "phpdocumentor/graphviz",
303 | "version": "dev-master",
304 | "source": {
305 | "type": "git",
306 | "url": "https://github.com/phpDocumentor/GraphViz.git",
307 | "reference": "c87d3646aa92357b311c9670a4f61c332eee02c2"
308 | },
309 | "dist": {
310 | "type": "zip",
311 | "url": "https://api.github.com/repos/phpDocumentor/GraphViz/zipball/c87d3646aa92357b311c9670a4f61c332eee02c2",
312 | "reference": "c87d3646aa92357b311c9670a4f61c332eee02c2",
313 | "shasum": ""
314 | },
315 | "require": {
316 | "php": ">=5.3.3"
317 | },
318 | "require-dev": {
319 | "phpunit/phpunit": "~4.0"
320 | },
321 | "type": "library",
322 | "autoload": {
323 | "psr-0": {
324 | "phpDocumentor": [
325 | "src/",
326 | "tests/unit"
327 | ]
328 | }
329 | },
330 | "notification-url": "https://packagist.org/downloads/",
331 | "license": [
332 | "MIT"
333 | ],
334 | "authors": [
335 | {
336 | "name": "Mike van Riel",
337 | "email": "mike.vanriel@naenius.com"
338 | }
339 | ],
340 | "time": "2015-07-16 20:42:47"
341 | },
342 | {
343 | "name": "pimple/pimple",
344 | "version": "1.1.x-dev",
345 | "source": {
346 | "type": "git",
347 | "url": "https://github.com/silexphp/Pimple.git",
348 | "reference": "bc2fc12cdf1f29bcad9e650d493a54a8fd1f3d85"
349 | },
350 | "dist": {
351 | "type": "zip",
352 | "url": "https://api.github.com/repos/silexphp/Pimple/zipball/bc2fc12cdf1f29bcad9e650d493a54a8fd1f3d85",
353 | "reference": "bc2fc12cdf1f29bcad9e650d493a54a8fd1f3d85",
354 | "shasum": ""
355 | },
356 | "require": {
357 | "php": ">=5.3.0"
358 | },
359 | "type": "library",
360 | "extra": {
361 | "branch-alias": {
362 | "dev-master": "1.1.x-dev"
363 | }
364 | },
365 | "autoload": {
366 | "psr-0": {
367 | "Pimple": "lib/"
368 | }
369 | },
370 | "notification-url": "https://packagist.org/downloads/",
371 | "license": [
372 | "MIT"
373 | ],
374 | "authors": [
375 | {
376 | "name": "Fabien Potencier",
377 | "email": "fabien@symfony.com"
378 | }
379 | ],
380 | "description": "Pimple is a simple Dependency Injection Container for PHP 5.3",
381 | "homepage": "http://pimple.sensiolabs.org",
382 | "keywords": [
383 | "container",
384 | "dependency injection"
385 | ],
386 | "time": "2014-04-20 07:24:09"
387 | },
388 | {
389 | "name": "symfony/console",
390 | "version": "2.8.x-dev",
391 | "source": {
392 | "type": "git",
393 | "url": "https://github.com/symfony/Console.git",
394 | "reference": "eef94b47e4e21ab887ef03192d2fb65cc9929c76"
395 | },
396 | "dist": {
397 | "type": "zip",
398 | "url": "https://api.github.com/repos/symfony/Console/zipball/eef94b47e4e21ab887ef03192d2fb65cc9929c76",
399 | "reference": "eef94b47e4e21ab887ef03192d2fb65cc9929c76",
400 | "shasum": ""
401 | },
402 | "require": {
403 | "php": ">=5.3.9"
404 | },
405 | "require-dev": {
406 | "psr/log": "~1.0",
407 | "symfony/event-dispatcher": "~2.1|~3.0.0",
408 | "symfony/phpunit-bridge": "~2.7|~3.0.0",
409 | "symfony/process": "~2.1|~3.0.0"
410 | },
411 | "suggest": {
412 | "psr/log": "For using the console logger",
413 | "symfony/event-dispatcher": "",
414 | "symfony/process": ""
415 | },
416 | "type": "library",
417 | "extra": {
418 | "branch-alias": {
419 | "dev-master": "2.8-dev"
420 | }
421 | },
422 | "autoload": {
423 | "psr-4": {
424 | "Symfony\\Component\\Console\\": ""
425 | }
426 | },
427 | "notification-url": "https://packagist.org/downloads/",
428 | "license": [
429 | "MIT"
430 | ],
431 | "authors": [
432 | {
433 | "name": "Fabien Potencier",
434 | "email": "fabien@symfony.com"
435 | },
436 | {
437 | "name": "Symfony Community",
438 | "homepage": "https://symfony.com/contributors"
439 | }
440 | ],
441 | "description": "Symfony Console Component",
442 | "homepage": "https://symfony.com",
443 | "time": "2015-07-29 07:12:56"
444 | },
445 | {
446 | "name": "symfony/finder",
447 | "version": "2.8.x-dev",
448 | "source": {
449 | "type": "git",
450 | "url": "https://github.com/symfony/Finder.git",
451 | "reference": "8712d5e8c4ad65e6b936ed9b6a581e5e6a87fddf"
452 | },
453 | "dist": {
454 | "type": "zip",
455 | "url": "https://api.github.com/repos/symfony/Finder/zipball/8712d5e8c4ad65e6b936ed9b6a581e5e6a87fddf",
456 | "reference": "8712d5e8c4ad65e6b936ed9b6a581e5e6a87fddf",
457 | "shasum": ""
458 | },
459 | "require": {
460 | "php": ">=5.3.9"
461 | },
462 | "require-dev": {
463 | "symfony/phpunit-bridge": "~2.7|~3.0.0"
464 | },
465 | "type": "library",
466 | "extra": {
467 | "branch-alias": {
468 | "dev-master": "2.8-dev"
469 | }
470 | },
471 | "autoload": {
472 | "psr-4": {
473 | "Symfony\\Component\\Finder\\": ""
474 | }
475 | },
476 | "notification-url": "https://packagist.org/downloads/",
477 | "license": [
478 | "MIT"
479 | ],
480 | "authors": [
481 | {
482 | "name": "Fabien Potencier",
483 | "email": "fabien@symfony.com"
484 | },
485 | {
486 | "name": "Symfony Community",
487 | "homepage": "https://symfony.com/contributors"
488 | }
489 | ],
490 | "description": "Symfony Finder Component",
491 | "homepage": "https://symfony.com",
492 | "time": "2015-07-09 16:11:14"
493 | },
494 | {
495 | "name": "symfony/process",
496 | "version": "2.8.x-dev",
497 | "source": {
498 | "type": "git",
499 | "url": "https://github.com/symfony/Process.git",
500 | "reference": "25d74c90d79e66905013714d8d188e4ccb5ff466"
501 | },
502 | "dist": {
503 | "type": "zip",
504 | "url": "https://api.github.com/repos/symfony/Process/zipball/25d74c90d79e66905013714d8d188e4ccb5ff466",
505 | "reference": "25d74c90d79e66905013714d8d188e4ccb5ff466",
506 | "shasum": ""
507 | },
508 | "require": {
509 | "php": ">=5.3.9"
510 | },
511 | "require-dev": {
512 | "symfony/phpunit-bridge": "~2.7|~3.0.0"
513 | },
514 | "type": "library",
515 | "extra": {
516 | "branch-alias": {
517 | "dev-master": "2.8-dev"
518 | }
519 | },
520 | "autoload": {
521 | "psr-4": {
522 | "Symfony\\Component\\Process\\": ""
523 | }
524 | },
525 | "notification-url": "https://packagist.org/downloads/",
526 | "license": [
527 | "MIT"
528 | ],
529 | "authors": [
530 | {
531 | "name": "Fabien Potencier",
532 | "email": "fabien@symfony.com"
533 | },
534 | {
535 | "name": "Symfony Community",
536 | "homepage": "https://symfony.com/contributors"
537 | }
538 | ],
539 | "description": "Symfony Process Component",
540 | "homepage": "https://symfony.com",
541 | "time": "2015-07-01 14:16:54"
542 | }
543 | ],
544 | "packages-dev": [
545 | {
546 | "name": "doctrine/instantiator",
547 | "version": "dev-master",
548 | "source": {
549 | "type": "git",
550 | "url": "https://github.com/doctrine/instantiator.git",
551 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
552 | },
553 | "dist": {
554 | "type": "zip",
555 | "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
556 | "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
557 | "shasum": ""
558 | },
559 | "require": {
560 | "php": ">=5.3,<8.0-DEV"
561 | },
562 | "require-dev": {
563 | "athletic/athletic": "~0.1.8",
564 | "ext-pdo": "*",
565 | "ext-phar": "*",
566 | "phpunit/phpunit": "~4.0",
567 | "squizlabs/php_codesniffer": "~2.0"
568 | },
569 | "type": "library",
570 | "extra": {
571 | "branch-alias": {
572 | "dev-master": "1.0.x-dev"
573 | }
574 | },
575 | "autoload": {
576 | "psr-4": {
577 | "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
578 | }
579 | },
580 | "notification-url": "https://packagist.org/downloads/",
581 | "license": [
582 | "MIT"
583 | ],
584 | "authors": [
585 | {
586 | "name": "Marco Pivetta",
587 | "email": "ocramius@gmail.com",
588 | "homepage": "http://ocramius.github.com/"
589 | }
590 | ],
591 | "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
592 | "homepage": "https://github.com/doctrine/instantiator",
593 | "keywords": [
594 | "constructor",
595 | "instantiate"
596 | ],
597 | "time": "2015-06-14 21:17:01"
598 | },
599 | {
600 | "name": "fabpot/php-cs-fixer",
601 | "version": "1.11.x-dev",
602 | "source": {
603 | "type": "git",
604 | "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git",
605 | "reference": "a32e3111cb3f811cb661024edaa3700e1b23b05d"
606 | },
607 | "dist": {
608 | "type": "zip",
609 | "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/a32e3111cb3f811cb661024edaa3700e1b23b05d",
610 | "reference": "a32e3111cb3f811cb661024edaa3700e1b23b05d",
611 | "shasum": ""
612 | },
613 | "require": {
614 | "ext-tokenizer": "*",
615 | "php": ">=5.3.6",
616 | "sebastian/diff": "~1.1",
617 | "symfony/console": "~2.3",
618 | "symfony/event-dispatcher": "~2.1",
619 | "symfony/filesystem": "~2.1",
620 | "symfony/finder": "~2.1",
621 | "symfony/process": "~2.3",
622 | "symfony/stopwatch": "~2.5"
623 | },
624 | "require-dev": {
625 | "satooshi/php-coveralls": "0.7.*@dev"
626 | },
627 | "bin": [
628 | "php-cs-fixer"
629 | ],
630 | "type": "application",
631 | "autoload": {
632 | "psr-4": {
633 | "Symfony\\CS\\": "Symfony/CS/"
634 | }
635 | },
636 | "notification-url": "https://packagist.org/downloads/",
637 | "license": [
638 | "MIT"
639 | ],
640 | "authors": [
641 | {
642 | "name": "Dariusz Rumiński",
643 | "email": "dariusz.ruminski@gmail.com"
644 | },
645 | {
646 | "name": "Fabien Potencier",
647 | "email": "fabien@symfony.com"
648 | }
649 | ],
650 | "description": "A tool to automatically fix PHP code style",
651 | "time": "2015-07-28 21:25:27"
652 | },
653 | {
654 | "name": "phpdocumentor/reflection-docblock",
655 | "version": "2.0.4",
656 | "source": {
657 | "type": "git",
658 | "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
659 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8"
660 | },
661 | "dist": {
662 | "type": "zip",
663 | "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8",
664 | "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8",
665 | "shasum": ""
666 | },
667 | "require": {
668 | "php": ">=5.3.3"
669 | },
670 | "require-dev": {
671 | "phpunit/phpunit": "~4.0"
672 | },
673 | "suggest": {
674 | "dflydev/markdown": "~1.0",
675 | "erusev/parsedown": "~1.0"
676 | },
677 | "type": "library",
678 | "extra": {
679 | "branch-alias": {
680 | "dev-master": "2.0.x-dev"
681 | }
682 | },
683 | "autoload": {
684 | "psr-0": {
685 | "phpDocumentor": [
686 | "src/"
687 | ]
688 | }
689 | },
690 | "notification-url": "https://packagist.org/downloads/",
691 | "license": [
692 | "MIT"
693 | ],
694 | "authors": [
695 | {
696 | "name": "Mike van Riel",
697 | "email": "mike.vanriel@naenius.com"
698 | }
699 | ],
700 | "time": "2015-02-03 12:10:50"
701 | },
702 | {
703 | "name": "phpspec/prophecy",
704 | "version": "dev-master",
705 | "source": {
706 | "type": "git",
707 | "url": "https://github.com/phpspec/prophecy.git",
708 | "reference": "5700f75b23b0dd3495c0f495fe33a5e6717ee160"
709 | },
710 | "dist": {
711 | "type": "zip",
712 | "url": "https://api.github.com/repos/phpspec/prophecy/zipball/5700f75b23b0dd3495c0f495fe33a5e6717ee160",
713 | "reference": "5700f75b23b0dd3495c0f495fe33a5e6717ee160",
714 | "shasum": ""
715 | },
716 | "require": {
717 | "doctrine/instantiator": "^1.0.2",
718 | "phpdocumentor/reflection-docblock": "~2.0",
719 | "sebastian/comparator": "~1.1"
720 | },
721 | "require-dev": {
722 | "phpspec/phpspec": "~2.0"
723 | },
724 | "type": "library",
725 | "extra": {
726 | "branch-alias": {
727 | "dev-master": "1.4.x-dev"
728 | }
729 | },
730 | "autoload": {
731 | "psr-0": {
732 | "Prophecy\\": "src/"
733 | }
734 | },
735 | "notification-url": "https://packagist.org/downloads/",
736 | "license": [
737 | "MIT"
738 | ],
739 | "authors": [
740 | {
741 | "name": "Konstantin Kudryashov",
742 | "email": "ever.zet@gmail.com",
743 | "homepage": "http://everzet.com"
744 | },
745 | {
746 | "name": "Marcello Duarte",
747 | "email": "marcello.duarte@gmail.com"
748 | }
749 | ],
750 | "description": "Highly opinionated mocking framework for PHP 5.3+",
751 | "homepage": "https://github.com/phpspec/prophecy",
752 | "keywords": [
753 | "Double",
754 | "Dummy",
755 | "fake",
756 | "mock",
757 | "spy",
758 | "stub"
759 | ],
760 | "time": "2015-06-30 10:26:46"
761 | },
762 | {
763 | "name": "phpunit/php-code-coverage",
764 | "version": "dev-master",
765 | "source": {
766 | "type": "git",
767 | "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
768 | "reference": "df29d420311aa94ed1eb26560b573710f3603b2d"
769 | },
770 | "dist": {
771 | "type": "zip",
772 | "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/df29d420311aa94ed1eb26560b573710f3603b2d",
773 | "reference": "df29d420311aa94ed1eb26560b573710f3603b2d",
774 | "shasum": ""
775 | },
776 | "require": {
777 | "php": ">=5.3.3",
778 | "phpunit/php-file-iterator": "~1.3",
779 | "phpunit/php-text-template": "~1.2",
780 | "phpunit/php-token-stream": "~1.3",
781 | "sebastian/environment": "~1.3",
782 | "sebastian/version": "~1.0"
783 | },
784 | "require-dev": {
785 | "ext-xdebug": ">=2.1.4",
786 | "phpunit/phpunit": "~4"
787 | },
788 | "suggest": {
789 | "ext-dom": "*",
790 | "ext-xdebug": ">=2.2.1",
791 | "ext-xmlwriter": "*"
792 | },
793 | "type": "library",
794 | "extra": {
795 | "branch-alias": {
796 | "dev-master": "2.2.x-dev"
797 | }
798 | },
799 | "autoload": {
800 | "classmap": [
801 | "src/"
802 | ]
803 | },
804 | "notification-url": "https://packagist.org/downloads/",
805 | "license": [
806 | "BSD-3-Clause"
807 | ],
808 | "authors": [
809 | {
810 | "name": "Sebastian Bergmann",
811 | "email": "sb@sebastian-bergmann.de",
812 | "role": "lead"
813 | }
814 | ],
815 | "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
816 | "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
817 | "keywords": [
818 | "coverage",
819 | "testing",
820 | "xunit"
821 | ],
822 | "time": "2015-07-27 14:08:10"
823 | },
824 | {
825 | "name": "phpunit/php-file-iterator",
826 | "version": "dev-master",
827 | "source": {
828 | "type": "git",
829 | "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
830 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0"
831 | },
832 | "dist": {
833 | "type": "zip",
834 | "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
835 | "reference": "6150bf2c35d3fc379e50c7602b75caceaa39dbf0",
836 | "shasum": ""
837 | },
838 | "require": {
839 | "php": ">=5.3.3"
840 | },
841 | "type": "library",
842 | "extra": {
843 | "branch-alias": {
844 | "dev-master": "1.4.x-dev"
845 | }
846 | },
847 | "autoload": {
848 | "classmap": [
849 | "src/"
850 | ]
851 | },
852 | "notification-url": "https://packagist.org/downloads/",
853 | "license": [
854 | "BSD-3-Clause"
855 | ],
856 | "authors": [
857 | {
858 | "name": "Sebastian Bergmann",
859 | "email": "sb@sebastian-bergmann.de",
860 | "role": "lead"
861 | }
862 | ],
863 | "description": "FilterIterator implementation that filters files based on a list of suffixes.",
864 | "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
865 | "keywords": [
866 | "filesystem",
867 | "iterator"
868 | ],
869 | "time": "2015-06-21 13:08:43"
870 | },
871 | {
872 | "name": "phpunit/php-text-template",
873 | "version": "1.2.1",
874 | "source": {
875 | "type": "git",
876 | "url": "https://github.com/sebastianbergmann/php-text-template.git",
877 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
878 | },
879 | "dist": {
880 | "type": "zip",
881 | "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
882 | "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
883 | "shasum": ""
884 | },
885 | "require": {
886 | "php": ">=5.3.3"
887 | },
888 | "type": "library",
889 | "autoload": {
890 | "classmap": [
891 | "src/"
892 | ]
893 | },
894 | "notification-url": "https://packagist.org/downloads/",
895 | "license": [
896 | "BSD-3-Clause"
897 | ],
898 | "authors": [
899 | {
900 | "name": "Sebastian Bergmann",
901 | "email": "sebastian@phpunit.de",
902 | "role": "lead"
903 | }
904 | ],
905 | "description": "Simple template engine.",
906 | "homepage": "https://github.com/sebastianbergmann/php-text-template/",
907 | "keywords": [
908 | "template"
909 | ],
910 | "time": "2015-06-21 13:50:34"
911 | },
912 | {
913 | "name": "phpunit/php-timer",
914 | "version": "dev-master",
915 | "source": {
916 | "type": "git",
917 | "url": "https://github.com/sebastianbergmann/php-timer.git",
918 | "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b"
919 | },
920 | "dist": {
921 | "type": "zip",
922 | "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
923 | "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b",
924 | "shasum": ""
925 | },
926 | "require": {
927 | "php": ">=5.3.3"
928 | },
929 | "type": "library",
930 | "autoload": {
931 | "classmap": [
932 | "src/"
933 | ]
934 | },
935 | "notification-url": "https://packagist.org/downloads/",
936 | "license": [
937 | "BSD-3-Clause"
938 | ],
939 | "authors": [
940 | {
941 | "name": "Sebastian Bergmann",
942 | "email": "sb@sebastian-bergmann.de",
943 | "role": "lead"
944 | }
945 | ],
946 | "description": "Utility class for timing",
947 | "homepage": "https://github.com/sebastianbergmann/php-timer/",
948 | "keywords": [
949 | "timer"
950 | ],
951 | "time": "2015-06-21 08:01:12"
952 | },
953 | {
954 | "name": "phpunit/php-token-stream",
955 | "version": "dev-master",
956 | "source": {
957 | "type": "git",
958 | "url": "https://github.com/sebastianbergmann/php-token-stream.git",
959 | "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9"
960 | },
961 | "dist": {
962 | "type": "zip",
963 | "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
964 | "reference": "7a9b0969488c3c54fd62b4d504b3ec758fd005d9",
965 | "shasum": ""
966 | },
967 | "require": {
968 | "ext-tokenizer": "*",
969 | "php": ">=5.3.3"
970 | },
971 | "require-dev": {
972 | "phpunit/phpunit": "~4.2"
973 | },
974 | "type": "library",
975 | "extra": {
976 | "branch-alias": {
977 | "dev-master": "1.4-dev"
978 | }
979 | },
980 | "autoload": {
981 | "classmap": [
982 | "src/"
983 | ]
984 | },
985 | "notification-url": "https://packagist.org/downloads/",
986 | "license": [
987 | "BSD-3-Clause"
988 | ],
989 | "authors": [
990 | {
991 | "name": "Sebastian Bergmann",
992 | "email": "sebastian@phpunit.de"
993 | }
994 | ],
995 | "description": "Wrapper around PHP's tokenizer extension.",
996 | "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
997 | "keywords": [
998 | "tokenizer"
999 | ],
1000 | "time": "2015-06-19 03:43:16"
1001 | },
1002 | {
1003 | "name": "phpunit/phpunit",
1004 | "version": "4.8.x-dev",
1005 | "source": {
1006 | "type": "git",
1007 | "url": "https://github.com/sebastianbergmann/phpunit.git",
1008 | "reference": "4b4f866d456648e625dc37e224c618659f13d121"
1009 | },
1010 | "dist": {
1011 | "type": "zip",
1012 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/4b4f866d456648e625dc37e224c618659f13d121",
1013 | "reference": "4b4f866d456648e625dc37e224c618659f13d121",
1014 | "shasum": ""
1015 | },
1016 | "require": {
1017 | "ext-dom": "*",
1018 | "ext-json": "*",
1019 | "ext-pcre": "*",
1020 | "ext-reflection": "*",
1021 | "ext-spl": "*",
1022 | "php": ">=5.3.3",
1023 | "phpspec/prophecy": "~1.3,>=1.3.1",
1024 | "phpunit/php-code-coverage": "~2.1",
1025 | "phpunit/php-file-iterator": "~1.4",
1026 | "phpunit/php-text-template": "~1.2",
1027 | "phpunit/php-timer": ">=1.0.6",
1028 | "phpunit/phpunit-mock-objects": "~2.3",
1029 | "sebastian/comparator": "~1.1",
1030 | "sebastian/diff": "~1.2",
1031 | "sebastian/environment": "~1.3",
1032 | "sebastian/exporter": "~1.2",
1033 | "sebastian/global-state": "~1.0",
1034 | "sebastian/version": "~1.0",
1035 | "symfony/yaml": "~2.1|~3.0"
1036 | },
1037 | "suggest": {
1038 | "phpunit/php-invoker": "~1.1"
1039 | },
1040 | "bin": [
1041 | "phpunit"
1042 | ],
1043 | "type": "library",
1044 | "extra": {
1045 | "branch-alias": {
1046 | "dev-master": "4.8.x-dev"
1047 | }
1048 | },
1049 | "autoload": {
1050 | "classmap": [
1051 | "src/"
1052 | ]
1053 | },
1054 | "notification-url": "https://packagist.org/downloads/",
1055 | "license": [
1056 | "BSD-3-Clause"
1057 | ],
1058 | "authors": [
1059 | {
1060 | "name": "Sebastian Bergmann",
1061 | "email": "sebastian@phpunit.de",
1062 | "role": "lead"
1063 | }
1064 | ],
1065 | "description": "The PHP Unit Testing framework.",
1066 | "homepage": "https://phpunit.de/",
1067 | "keywords": [
1068 | "phpunit",
1069 | "testing",
1070 | "xunit"
1071 | ],
1072 | "time": "2015-07-29 11:20:37"
1073 | },
1074 | {
1075 | "name": "phpunit/phpunit-mock-objects",
1076 | "version": "2.3.x-dev",
1077 | "source": {
1078 | "type": "git",
1079 | "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
1080 | "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42"
1081 | },
1082 | "dist": {
1083 | "type": "zip",
1084 | "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/18dfbcb81d05e2296c0bcddd4db96cade75e6f42",
1085 | "reference": "18dfbcb81d05e2296c0bcddd4db96cade75e6f42",
1086 | "shasum": ""
1087 | },
1088 | "require": {
1089 | "doctrine/instantiator": "~1.0,>=1.0.2",
1090 | "php": ">=5.3.3",
1091 | "phpunit/php-text-template": "~1.2",
1092 | "sebastian/exporter": "~1.2"
1093 | },
1094 | "require-dev": {
1095 | "phpunit/phpunit": "~4.4"
1096 | },
1097 | "suggest": {
1098 | "ext-soap": "*"
1099 | },
1100 | "type": "library",
1101 | "extra": {
1102 | "branch-alias": {
1103 | "dev-master": "2.3.x-dev"
1104 | }
1105 | },
1106 | "autoload": {
1107 | "classmap": [
1108 | "src/"
1109 | ]
1110 | },
1111 | "notification-url": "https://packagist.org/downloads/",
1112 | "license": [
1113 | "BSD-3-Clause"
1114 | ],
1115 | "authors": [
1116 | {
1117 | "name": "Sebastian Bergmann",
1118 | "email": "sb@sebastian-bergmann.de",
1119 | "role": "lead"
1120 | }
1121 | ],
1122 | "description": "Mock Object library for PHPUnit",
1123 | "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
1124 | "keywords": [
1125 | "mock",
1126 | "xunit"
1127 | ],
1128 | "time": "2015-07-10 06:54:24"
1129 | },
1130 | {
1131 | "name": "sebastian/comparator",
1132 | "version": "dev-master",
1133 | "source": {
1134 | "type": "git",
1135 | "url": "https://github.com/sebastianbergmann/comparator.git",
1136 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22"
1137 | },
1138 | "dist": {
1139 | "type": "zip",
1140 | "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/937efb279bd37a375bcadf584dec0726f84dbf22",
1141 | "reference": "937efb279bd37a375bcadf584dec0726f84dbf22",
1142 | "shasum": ""
1143 | },
1144 | "require": {
1145 | "php": ">=5.3.3",
1146 | "sebastian/diff": "~1.2",
1147 | "sebastian/exporter": "~1.2"
1148 | },
1149 | "require-dev": {
1150 | "phpunit/phpunit": "~4.4"
1151 | },
1152 | "type": "library",
1153 | "extra": {
1154 | "branch-alias": {
1155 | "dev-master": "1.2.x-dev"
1156 | }
1157 | },
1158 | "autoload": {
1159 | "classmap": [
1160 | "src/"
1161 | ]
1162 | },
1163 | "notification-url": "https://packagist.org/downloads/",
1164 | "license": [
1165 | "BSD-3-Clause"
1166 | ],
1167 | "authors": [
1168 | {
1169 | "name": "Jeff Welch",
1170 | "email": "whatthejeff@gmail.com"
1171 | },
1172 | {
1173 | "name": "Volker Dusch",
1174 | "email": "github@wallbash.com"
1175 | },
1176 | {
1177 | "name": "Bernhard Schussek",
1178 | "email": "bschussek@2bepublished.at"
1179 | },
1180 | {
1181 | "name": "Sebastian Bergmann",
1182 | "email": "sebastian@phpunit.de"
1183 | }
1184 | ],
1185 | "description": "Provides the functionality to compare PHP values for equality",
1186 | "homepage": "http://www.github.com/sebastianbergmann/comparator",
1187 | "keywords": [
1188 | "comparator",
1189 | "compare",
1190 | "equality"
1191 | ],
1192 | "time": "2015-07-26 15:48:44"
1193 | },
1194 | {
1195 | "name": "sebastian/diff",
1196 | "version": "dev-master",
1197 | "source": {
1198 | "type": "git",
1199 | "url": "https://github.com/sebastianbergmann/diff.git",
1200 | "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051"
1201 | },
1202 | "dist": {
1203 | "type": "zip",
1204 | "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/6899b3e33bfbd386d88b5eea5f65f563e8793051",
1205 | "reference": "6899b3e33bfbd386d88b5eea5f65f563e8793051",
1206 | "shasum": ""
1207 | },
1208 | "require": {
1209 | "php": ">=5.3.3"
1210 | },
1211 | "require-dev": {
1212 | "phpunit/phpunit": "~4.2"
1213 | },
1214 | "type": "library",
1215 | "extra": {
1216 | "branch-alias": {
1217 | "dev-master": "1.3-dev"
1218 | }
1219 | },
1220 | "autoload": {
1221 | "classmap": [
1222 | "src/"
1223 | ]
1224 | },
1225 | "notification-url": "https://packagist.org/downloads/",
1226 | "license": [
1227 | "BSD-3-Clause"
1228 | ],
1229 | "authors": [
1230 | {
1231 | "name": "Kore Nordmann",
1232 | "email": "mail@kore-nordmann.de"
1233 | },
1234 | {
1235 | "name": "Sebastian Bergmann",
1236 | "email": "sebastian@phpunit.de"
1237 | }
1238 | ],
1239 | "description": "Diff implementation",
1240 | "homepage": "http://www.github.com/sebastianbergmann/diff",
1241 | "keywords": [
1242 | "diff"
1243 | ],
1244 | "time": "2015-06-22 14:15:55"
1245 | },
1246 | {
1247 | "name": "sebastian/environment",
1248 | "version": "dev-master",
1249 | "source": {
1250 | "type": "git",
1251 | "url": "https://github.com/sebastianbergmann/environment.git",
1252 | "reference": "70c3ba9398826b0d0117c2e9f1922c3bc47644ce"
1253 | },
1254 | "dist": {
1255 | "type": "zip",
1256 | "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/70c3ba9398826b0d0117c2e9f1922c3bc47644ce",
1257 | "reference": "70c3ba9398826b0d0117c2e9f1922c3bc47644ce",
1258 | "shasum": ""
1259 | },
1260 | "require": {
1261 | "php": ">=5.3.3"
1262 | },
1263 | "require-dev": {
1264 | "phpunit/phpunit": "~4.4"
1265 | },
1266 | "type": "library",
1267 | "extra": {
1268 | "branch-alias": {
1269 | "dev-master": "1.3.x-dev"
1270 | }
1271 | },
1272 | "autoload": {
1273 | "classmap": [
1274 | "src/"
1275 | ]
1276 | },
1277 | "notification-url": "https://packagist.org/downloads/",
1278 | "license": [
1279 | "BSD-3-Clause"
1280 | ],
1281 | "authors": [
1282 | {
1283 | "name": "Sebastian Bergmann",
1284 | "email": "sebastian@phpunit.de"
1285 | }
1286 | ],
1287 | "description": "Provides functionality to handle HHVM/PHP environments",
1288 | "homepage": "http://www.github.com/sebastianbergmann/environment",
1289 | "keywords": [
1290 | "Xdebug",
1291 | "environment",
1292 | "hhvm"
1293 | ],
1294 | "time": "2015-07-26 09:06:39"
1295 | },
1296 | {
1297 | "name": "sebastian/exporter",
1298 | "version": "dev-master",
1299 | "source": {
1300 | "type": "git",
1301 | "url": "https://github.com/sebastianbergmann/exporter.git",
1302 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e"
1303 | },
1304 | "dist": {
1305 | "type": "zip",
1306 | "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e",
1307 | "reference": "7ae5513327cb536431847bcc0c10edba2701064e",
1308 | "shasum": ""
1309 | },
1310 | "require": {
1311 | "php": ">=5.3.3",
1312 | "sebastian/recursion-context": "~1.0"
1313 | },
1314 | "require-dev": {
1315 | "phpunit/phpunit": "~4.4"
1316 | },
1317 | "type": "library",
1318 | "extra": {
1319 | "branch-alias": {
1320 | "dev-master": "1.2.x-dev"
1321 | }
1322 | },
1323 | "autoload": {
1324 | "classmap": [
1325 | "src/"
1326 | ]
1327 | },
1328 | "notification-url": "https://packagist.org/downloads/",
1329 | "license": [
1330 | "BSD-3-Clause"
1331 | ],
1332 | "authors": [
1333 | {
1334 | "name": "Jeff Welch",
1335 | "email": "whatthejeff@gmail.com"
1336 | },
1337 | {
1338 | "name": "Volker Dusch",
1339 | "email": "github@wallbash.com"
1340 | },
1341 | {
1342 | "name": "Bernhard Schussek",
1343 | "email": "bschussek@2bepublished.at"
1344 | },
1345 | {
1346 | "name": "Sebastian Bergmann",
1347 | "email": "sebastian@phpunit.de"
1348 | },
1349 | {
1350 | "name": "Adam Harvey",
1351 | "email": "aharvey@php.net"
1352 | }
1353 | ],
1354 | "description": "Provides the functionality to export PHP variables for visualization",
1355 | "homepage": "http://www.github.com/sebastianbergmann/exporter",
1356 | "keywords": [
1357 | "export",
1358 | "exporter"
1359 | ],
1360 | "time": "2015-06-21 07:55:53"
1361 | },
1362 | {
1363 | "name": "sebastian/global-state",
1364 | "version": "dev-master",
1365 | "source": {
1366 | "type": "git",
1367 | "url": "https://github.com/sebastianbergmann/global-state.git",
1368 | "reference": "23af31f402993cfd94e99cbc4b782e9a78eb0e97"
1369 | },
1370 | "dist": {
1371 | "type": "zip",
1372 | "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23af31f402993cfd94e99cbc4b782e9a78eb0e97",
1373 | "reference": "23af31f402993cfd94e99cbc4b782e9a78eb0e97",
1374 | "shasum": ""
1375 | },
1376 | "require": {
1377 | "php": ">=5.3.3"
1378 | },
1379 | "require-dev": {
1380 | "phpunit/phpunit": "~4.2"
1381 | },
1382 | "suggest": {
1383 | "ext-uopz": "*"
1384 | },
1385 | "type": "library",
1386 | "extra": {
1387 | "branch-alias": {
1388 | "dev-master": "1.0-dev"
1389 | }
1390 | },
1391 | "autoload": {
1392 | "classmap": [
1393 | "src/"
1394 | ]
1395 | },
1396 | "notification-url": "https://packagist.org/downloads/",
1397 | "license": [
1398 | "BSD-3-Clause"
1399 | ],
1400 | "authors": [
1401 | {
1402 | "name": "Sebastian Bergmann",
1403 | "email": "sebastian@phpunit.de"
1404 | }
1405 | ],
1406 | "description": "Snapshotting of global state",
1407 | "homepage": "http://www.github.com/sebastianbergmann/global-state",
1408 | "keywords": [
1409 | "global state"
1410 | ],
1411 | "time": "2015-06-21 15:11:22"
1412 | },
1413 | {
1414 | "name": "sebastian/recursion-context",
1415 | "version": "dev-master",
1416 | "source": {
1417 | "type": "git",
1418 | "url": "https://github.com/sebastianbergmann/recursion-context.git",
1419 | "reference": "994d4a811bafe801fb06dccbee797863ba2792ba"
1420 | },
1421 | "dist": {
1422 | "type": "zip",
1423 | "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/994d4a811bafe801fb06dccbee797863ba2792ba",
1424 | "reference": "994d4a811bafe801fb06dccbee797863ba2792ba",
1425 | "shasum": ""
1426 | },
1427 | "require": {
1428 | "php": ">=5.3.3"
1429 | },
1430 | "require-dev": {
1431 | "phpunit/phpunit": "~4.4"
1432 | },
1433 | "type": "library",
1434 | "extra": {
1435 | "branch-alias": {
1436 | "dev-master": "1.0.x-dev"
1437 | }
1438 | },
1439 | "autoload": {
1440 | "classmap": [
1441 | "src/"
1442 | ]
1443 | },
1444 | "notification-url": "https://packagist.org/downloads/",
1445 | "license": [
1446 | "BSD-3-Clause"
1447 | ],
1448 | "authors": [
1449 | {
1450 | "name": "Jeff Welch",
1451 | "email": "whatthejeff@gmail.com"
1452 | },
1453 | {
1454 | "name": "Sebastian Bergmann",
1455 | "email": "sebastian@phpunit.de"
1456 | },
1457 | {
1458 | "name": "Adam Harvey",
1459 | "email": "aharvey@php.net"
1460 | }
1461 | ],
1462 | "description": "Provides functionality to recursively process PHP variables",
1463 | "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1464 | "time": "2015-06-21 08:04:50"
1465 | },
1466 | {
1467 | "name": "sebastian/version",
1468 | "version": "1.0.6",
1469 | "source": {
1470 | "type": "git",
1471 | "url": "https://github.com/sebastianbergmann/version.git",
1472 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
1473 | },
1474 | "dist": {
1475 | "type": "zip",
1476 | "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1477 | "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1478 | "shasum": ""
1479 | },
1480 | "type": "library",
1481 | "autoload": {
1482 | "classmap": [
1483 | "src/"
1484 | ]
1485 | },
1486 | "notification-url": "https://packagist.org/downloads/",
1487 | "license": [
1488 | "BSD-3-Clause"
1489 | ],
1490 | "authors": [
1491 | {
1492 | "name": "Sebastian Bergmann",
1493 | "email": "sebastian@phpunit.de",
1494 | "role": "lead"
1495 | }
1496 | ],
1497 | "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1498 | "homepage": "https://github.com/sebastianbergmann/version",
1499 | "time": "2015-06-21 13:59:46"
1500 | },
1501 | {
1502 | "name": "symfony/event-dispatcher",
1503 | "version": "2.8.x-dev",
1504 | "source": {
1505 | "type": "git",
1506 | "url": "https://github.com/symfony/EventDispatcher.git",
1507 | "reference": "d7246885b7fe4cb5a2786bda34362d2f0e40b730"
1508 | },
1509 | "dist": {
1510 | "type": "zip",
1511 | "url": "https://api.github.com/repos/symfony/EventDispatcher/zipball/d7246885b7fe4cb5a2786bda34362d2f0e40b730",
1512 | "reference": "d7246885b7fe4cb5a2786bda34362d2f0e40b730",
1513 | "shasum": ""
1514 | },
1515 | "require": {
1516 | "php": ">=5.3.9"
1517 | },
1518 | "require-dev": {
1519 | "psr/log": "~1.0",
1520 | "symfony/config": "~2.0,>=2.0.5|~3.0.0",
1521 | "symfony/dependency-injection": "~2.6|~3.0.0",
1522 | "symfony/expression-language": "~2.6|~3.0.0",
1523 | "symfony/phpunit-bridge": "~2.7|~3.0.0",
1524 | "symfony/stopwatch": "~2.3|~3.0.0"
1525 | },
1526 | "suggest": {
1527 | "symfony/dependency-injection": "",
1528 | "symfony/http-kernel": ""
1529 | },
1530 | "type": "library",
1531 | "extra": {
1532 | "branch-alias": {
1533 | "dev-master": "2.8-dev"
1534 | }
1535 | },
1536 | "autoload": {
1537 | "psr-4": {
1538 | "Symfony\\Component\\EventDispatcher\\": ""
1539 | }
1540 | },
1541 | "notification-url": "https://packagist.org/downloads/",
1542 | "license": [
1543 | "MIT"
1544 | ],
1545 | "authors": [
1546 | {
1547 | "name": "Fabien Potencier",
1548 | "email": "fabien@symfony.com"
1549 | },
1550 | {
1551 | "name": "Symfony Community",
1552 | "homepage": "https://symfony.com/contributors"
1553 | }
1554 | ],
1555 | "description": "Symfony EventDispatcher Component",
1556 | "homepage": "https://symfony.com",
1557 | "time": "2015-06-24 15:32:32"
1558 | },
1559 | {
1560 | "name": "symfony/filesystem",
1561 | "version": "2.8.x-dev",
1562 | "source": {
1563 | "type": "git",
1564 | "url": "https://github.com/symfony/Filesystem.git",
1565 | "reference": "9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e"
1566 | },
1567 | "dist": {
1568 | "type": "zip",
1569 | "url": "https://api.github.com/repos/symfony/Filesystem/zipball/9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e",
1570 | "reference": "9f70c5625a32b2f1e6fc37222f52b4e0eb437b0e",
1571 | "shasum": ""
1572 | },
1573 | "require": {
1574 | "php": ">=5.3.9"
1575 | },
1576 | "require-dev": {
1577 | "symfony/phpunit-bridge": "~2.7|~3.0.0"
1578 | },
1579 | "type": "library",
1580 | "extra": {
1581 | "branch-alias": {
1582 | "dev-master": "2.8-dev"
1583 | }
1584 | },
1585 | "autoload": {
1586 | "psr-4": {
1587 | "Symfony\\Component\\Filesystem\\": ""
1588 | }
1589 | },
1590 | "notification-url": "https://packagist.org/downloads/",
1591 | "license": [
1592 | "MIT"
1593 | ],
1594 | "authors": [
1595 | {
1596 | "name": "Fabien Potencier",
1597 | "email": "fabien@symfony.com"
1598 | },
1599 | {
1600 | "name": "Symfony Community",
1601 | "homepage": "https://symfony.com/contributors"
1602 | }
1603 | ],
1604 | "description": "Symfony Filesystem Component",
1605 | "homepage": "https://symfony.com",
1606 | "time": "2015-07-09 16:11:14"
1607 | },
1608 | {
1609 | "name": "symfony/stopwatch",
1610 | "version": "2.8.x-dev",
1611 | "source": {
1612 | "type": "git",
1613 | "url": "https://github.com/symfony/Stopwatch.git",
1614 | "reference": "cd5f0dc1d3d0e2c83461dad77e20a9186beb6146"
1615 | },
1616 | "dist": {
1617 | "type": "zip",
1618 | "url": "https://api.github.com/repos/symfony/Stopwatch/zipball/cd5f0dc1d3d0e2c83461dad77e20a9186beb6146",
1619 | "reference": "cd5f0dc1d3d0e2c83461dad77e20a9186beb6146",
1620 | "shasum": ""
1621 | },
1622 | "require": {
1623 | "php": ">=5.3.9"
1624 | },
1625 | "require-dev": {
1626 | "symfony/phpunit-bridge": "~2.7|~3.0.0"
1627 | },
1628 | "type": "library",
1629 | "extra": {
1630 | "branch-alias": {
1631 | "dev-master": "2.8-dev"
1632 | }
1633 | },
1634 | "autoload": {
1635 | "psr-4": {
1636 | "Symfony\\Component\\Stopwatch\\": ""
1637 | }
1638 | },
1639 | "notification-url": "https://packagist.org/downloads/",
1640 | "license": [
1641 | "MIT"
1642 | ],
1643 | "authors": [
1644 | {
1645 | "name": "Fabien Potencier",
1646 | "email": "fabien@symfony.com"
1647 | },
1648 | {
1649 | "name": "Symfony Community",
1650 | "homepage": "https://symfony.com/contributors"
1651 | }
1652 | ],
1653 | "description": "Symfony Stopwatch Component",
1654 | "homepage": "https://symfony.com",
1655 | "time": "2015-07-01 18:24:26"
1656 | },
1657 | {
1658 | "name": "symfony/yaml",
1659 | "version": "dev-master",
1660 | "source": {
1661 | "type": "git",
1662 | "url": "https://github.com/symfony/Yaml.git",
1663 | "reference": "1edbff215ddf93bf41e8b6a0e02428ef66fa2ea3"
1664 | },
1665 | "dist": {
1666 | "type": "zip",
1667 | "url": "https://api.github.com/repos/symfony/Yaml/zipball/1edbff215ddf93bf41e8b6a0e02428ef66fa2ea3",
1668 | "reference": "1edbff215ddf93bf41e8b6a0e02428ef66fa2ea3",
1669 | "shasum": ""
1670 | },
1671 | "require": {
1672 | "php": ">=5.5.9"
1673 | },
1674 | "require-dev": {
1675 | "symfony/phpunit-bridge": "~2.8|~3.0"
1676 | },
1677 | "type": "library",
1678 | "extra": {
1679 | "branch-alias": {
1680 | "dev-master": "3.0-dev"
1681 | }
1682 | },
1683 | "autoload": {
1684 | "psr-4": {
1685 | "Symfony\\Component\\Yaml\\": ""
1686 | }
1687 | },
1688 | "notification-url": "https://packagist.org/downloads/",
1689 | "license": [
1690 | "MIT"
1691 | ],
1692 | "authors": [
1693 | {
1694 | "name": "Fabien Potencier",
1695 | "email": "fabien@symfony.com"
1696 | },
1697 | {
1698 | "name": "Symfony Community",
1699 | "homepage": "https://symfony.com/contributors"
1700 | }
1701 | ],
1702 | "description": "Symfony Yaml Component",
1703 | "homepage": "https://symfony.com",
1704 | "time": "2015-07-26 09:09:51"
1705 | }
1706 | ],
1707 | "aliases": [],
1708 | "minimum-stability": "dev",
1709 | "stability-flags": {
1710 | "ircmaxell/php-cfg": 20,
1711 | "ircmaxell/php-types": 20,
1712 | "ircmaxell/tuli": 20
1713 | },
1714 | "prefer-stable": false,
1715 | "prefer-lowest": false,
1716 | "platform": {
1717 | "php": ">=5.5"
1718 | },
1719 | "platform-dev": []
1720 | }
1721 |
--------------------------------------------------------------------------------