1
0
Fork 0
Commit Graph

11254 Commits (f1ebc1d2b606a3c8386a89d7d65b3e986ab9961b)

Author SHA1 Message Date
Jordi Boggiano 73c109c561
Make sure that names with wildcards which are not preceded by dots are also seen as package names and not version constraints 2021-08-25 21:09:49 +02:00
Jordi Boggiano 6ab1b6a7d2
Regex simplifications 2021-08-23 22:18:03 +02:00
Jordi Boggiano 3f79e59f69
Add test assertions for heredoc marker inside the text 2021-08-23 13:14:16 +02:00
Jordi Boggiano f6c446bdd7
Tweak to allow matching delimiter within the string 2021-08-23 13:14:15 +02:00
Jordi Boggiano c44be998ab
Undo new stripping code and fix regex 2021-08-23 13:14:02 +02:00
powellblyth 5e75017166
Just some comments with 'it's' that should have been 'its' (#10071)
Co-authored-by: Toby Powell-Blyth <tobypowell-blyth@elasticstage.com>
2021-08-22 13:41:18 +02:00
jrfnl 40bd4b03ad
ClassMapGenerator: stabilize the heredoc/nowdoc stripping
I've looked into 10067 and have come to the conclusion that using a single regex to strip the heredoc/nowdocs is always going to run into trouble as:
* Either the matching will be too greedy (issue 10067);
* Or the matching will run into backtrace limits for large heredoc/nowdocs.

We cannot solve both within a single regex.

So, I'm proposing a slightly different solution which should support both and should also improve performance for files containing large heredoc/nowdocs.

The `stripHereNowDocs()` function will find a start marker and remember the offset of the start marker.
It will then find the end marker and strip the contents between the two (replace with `null`).
The function will then recurse onto itself until all heredocs/nowdocs in a file have been removed.
2021-08-21 17:45:43 +02:00
jrfnl b66b23a03f
ClassMapGeneratorTest: add test with consecutive duplicate heredoc markers
... as well as a test with heredoc markers with only a newline character between the start and end marker.
2021-08-21 17:45:42 +02:00
Jordi Boggiano d3c176ec69
PHPStan Level 5 (#10070)
* Bump PHPStan to level 5

* Update seld/phar-utils to latest

* Add phpstan-setup / phpstan scripts
2021-08-21 17:41:52 +02:00
Jordi Boggiano 4b8585d767
Update changelog 2021-08-19 17:04:25 +02:00
Jordi Boggiano de5f18d64b
Update IRC URL too in composer.json 2021-08-19 16:13:45 +02:00
Jordi Boggiano b583310476
Allow ircs protocol for support.irc 2021-08-19 16:03:59 +02:00
Jordi Boggiano 17b972f2a9
Update community page 2021-08-19 16:03:36 +02:00
Ryan McCue 812cf836f3
Add documentation for v2 repository fields (#10033) 2021-08-19 15:49:02 +02:00
Jordi Boggiano 74b231a4bc
Fix lib-openssl detection on FreeBSD, fixes #10046 2021-08-19 15:00:08 +02:00
Jordi Boggiano 9727adf63b
Fix init performance when plugin commands are not needed, fixes #10064 2021-08-19 14:37:50 +02:00
Juliette 5f48f87501
PHPUnit: move environment variable into PHPUnit config file (#10062)
Co-authored-by: jrfnl <jrfnl@users.noreply.github.com>
2021-08-19 13:21:04 +02:00
Jordi Boggiano e5a50d1f06
Merge pull request #10061 from Seldaek/deprecations
Fix the remainder of PHP8.1 deprecation warnings
2021-08-19 13:14:37 +02:00
Jordi Boggiano a586a753df
Fix all remaining php8.1 test suite deprecations 2021-08-19 13:00:30 +02:00
Jordi Boggiano b77fce8a4f
More deprecation fixes by using ProcessExecutorMock and a couple of PackageInterface type fixes 2021-08-18 23:35:27 +02:00
Jordi Boggiano 6aa2d15868
Introduce ProcessExecutorMock to fix deprecations and amount of mocking pain 2021-08-18 17:17:56 +02:00
Jordi Boggiano 5062619046
Fix deprecation warnings with strpos receiving null 2021-08-18 15:55:37 +02:00
Jordi Boggiano 0b09e08f4b
Fix direct deprecations 2021-08-18 15:17:06 +02:00
Jordi Boggiano 20b7e395b4
Fail tests when deprecations are triggered in the code, refs #10038 2021-08-18 15:13:04 +02:00
Jordi Boggiano c5a02a2b58
Fix return value of ProcessExecutor::getErrorOutput, closes #10054 2021-08-18 14:55:38 +02:00
Jordi Boggiano cac4c190f1
Merge pull request #10053 from jrfnl/feature/php-8.1-null-to-non-nullable-fix-2
PHP 8.1: prevent a "null to non-nullable" deprecation notice [2] (test only fix)
2021-08-18 14:39:51 +02:00
Jordi Boggiano 052065028f
Merge pull request #10051 from jrfnl/feature/php-8.1-null-to-non-nullable-fix-1
PHP 8.1: prevent a "null to non-nullable" deprecation notice [1]
2021-08-18 14:36:14 +02:00
Jordi Boggiano 3dcc6c1514
Make return value explicit 2021-08-18 14:32:06 +02:00
Jordi Boggiano 9708f4568f
Merge pull request #10055 from jrfnl/feature/php-8.1-fix-missing-mock-expectation
PHP 8.1/LibraryInstallerTest: add missing mock expectation
2021-08-18 14:31:30 +02:00
Jordi Boggiano cfe718fa43
Fix usage of getRequiredPackage, closes #10052 2021-08-18 14:30:09 +02:00
Jordi Boggiano b232ee6663
Fix test 2021-08-18 14:25:35 +02:00
Jordi Boggiano 8ce0ea300e
Fix pear repo preventing self-update from functioning, fixes #10049 2021-08-18 14:23:08 +02:00
Jordi Boggiano a72784c4da
Merge pull request #10057 from nicholsonjf/docs-double-pipe-note
Note in docs about how single pipes are treated
2021-08-18 12:11:09 +02:00
Jordi Boggiano 5c201687e5
Fix 7zip issues on windows when mixing forward and backslashes, fixes #10058 2021-08-18 11:55:51 +02:00
Jordi Boggiano b7bb7718fb
Merge pull request #10060 from goodjack/update-plugin-api-version-2.1.0
Update the Composer plugin API version to 2.1.0
2021-08-18 11:35:24 +02:00
Jordi Boggiano 91a1a471db
Fix path repo bug causing symlinks to be left behind when uninstalling, fixes #10023 2021-08-18 11:25:00 +02:00
Jordi Boggiano d465df434c
Make sure diagnose command can run without proc_open, refs #9253 2021-08-18 10:16:20 +02:00
Jordi Boggiano 60fe67086e
Make sure proc_open is not required for basic installs, refs #9253 2021-08-18 10:15:47 +02:00
Jordi Boggiano d6f4111f35
Fix php 5.3 support 2021-08-17 16:59:00 +02:00
Jordi Boggiano 46f2d9de48
Fix php 5.3 support 2021-08-17 16:53:16 +02:00
Jordi Boggiano ddd7920d2a
Fix corrupt archives in cache from getting the installs stuck forever, and make sure it fails only once, fixes #10028 2021-08-17 16:49:36 +02:00
Jordi Boggiano e49f24e355
Switch phar signatures to sha512 2021-08-17 15:58:27 +02:00
小克 d9a94b376a
Update the Composer plugin API version to 2.1.0 2021-08-17 18:36:08 +08:00
James Nicholson 2d79f3381b Single pipe note 2021-08-13 13:50:38 -04:00
Jordi Boggiano 4da1a2d43a
Merge pull request #10050 from jrfnl/feature/10037-classmapgenerator-bug-fixes
ClassMapGenerator: fix two bugs (long heredocs + markers in text)
2021-08-12 16:24:45 +02:00
jrfnl 7004e0d031 PHP 8.1/LibraryInstallerTest: add missing mock expectation
The `LibraryInstallerTest::testUninstall()` method mocks a `Package` object, but did not set an expectation for a call to `getName()`, while that method _is_ called in the `LibraryInstaller::uninstall()` method.

Without expectation, the mock returns `null`, which was subsequently being passed on to `strpos()` leading to the below error.

Fixes:
```
Deprecation triggered by Composer\Test\Installer\LibraryInstallerTest::testUninstall:
strpos(): Passing null to parameter #1 ($haystack) of type string is deprecated

Stack trace:
0 [internal function]: Symfony\Bridge\PhpUnit\DeprecationErrorHandler->handleError(8192, '...', '...', 202)
1 src/Composer/Installer/LibraryInstaller.php(202): strpos(NULL, '...')
2 vendor/react/promise/src/FulfilledPromise.php(28): Composer\Installer\LibraryInstaller->Composer\Installer\{closure}(NULL)
3 src/Composer/Installer/LibraryInstaller.php(208): React\Promise\FulfilledPromise->then(Object(Closure))
4 tests/Composer/Test/Installer/LibraryInstallerTest.php(221): Composer\Installer\LibraryInstaller->uninstall(Object(Mock_InstalledRepositoryInterface_e3699f95), Object(Mock_Package_e4571076))
...
```
2021-08-12 03:38:56 +02:00
jrfnl 7022ceb0a6 PHP 8.1: prevent a "null to non-nullable" deprecation notice (test only fix)
Not all tests in the `InstallerTest` class actually create a temporary directory and set the `$this->tempComposerHome` property.

Those tests which didn't, throw a notice in PHP 8.1.

Fixes 3 notices along the lines of:
```
Deprecation triggered by Composer\Test\InstallerTest::tearDown:
is_dir(): Passing null to parameter #1 ($filename) of type string is deprecated

Stack trace:
0 [internal function]: Symfony\Bridge\PhpUnit\DeprecationErrorHandler->handleError(8192, '...', '...', 53)
1 tests/Composer/Test/InstallerTest.php(53): is_dir(NULL)
...
```
2021-08-12 03:02:19 +02:00
jrfnl 609007b072 PHP 8.1: prevent a "null to non-nullable" deprecation notice
Discovered while running the existing unit tests on PHP 8.1.

The default state of the protected `$distUrl` property is "not set" and the property may not be set when the `Package::setSourceDistReferences()` method gets called.

Fixes a total of 9 deprecation notices along the lines of:
```
Deprecation triggered by Composer\Test\DependencyResolver\PoolBuilderTest::testPoolBuilder:
preg_match(): Passing null to parameter #2 ($subject) of type string is deprecated

Stack trace:
0 [internal function]: Symfony\Bridge\PhpUnit\DeprecationErrorHandler->handleError(8192, '...', '...', 597)
1 src/Composer/Package/Package.php(597): preg_match('...', NULL)
2 src/Composer/DependencyResolver/PoolBuilder.php(360): Composer\Package\Package->setSourceDistReferences('...')
3 src/Composer/DependencyResolver/PoolBuilder.php(338): Composer\DependencyResolver\PoolBuilder->loadPackage(Object(Composer\DependencyResolver\Request), Object(Composer\Package\CompletePackage))
4 src/Composer/DependencyResolver/PoolBuilder.php(195): Composer\DependencyResolver\PoolBuilder->loadPackagesMarkedForLoading(Object(Composer\DependencyResolver\Request), Array)
5 src/Composer/Repository/RepositorySet.php(229): Composer\DependencyResolver\PoolBuilder->buildPool(Array, Object(Composer\DependencyResolver\Request))
6 tests/Composer/Test/DependencyResolver/PoolBuilderTest.php(110): Composer\Repository\RepositorySet->createPool(Object(Composer\DependencyResolver\Request), Object(Composer\IO\NullIO))
...
```

Side-note: I'm wondering why `$this->getDistUrl()` is used instead of using the `$distUrl` property. It is a property within the same class after all. Haven't changed it, but did want to raise the question.

Refs:
* https://www.php.net/manual/en/function.preg-match.php
* https://wiki.php.net/rfc/deprecate_null_to_scalar_internal_arg
2021-08-12 02:45:29 +02:00
jrfnl 42c6a0d7c5 ClassMapGenerator: fix the regex
By using a look ahead assertion to match "new line - maybe whitespace - marker", the negative performance impact of the `.*` is significantly mitigated and backtracing will be severely limited.

This fixes the bug as reported in 10037.

The bug was discovered due to a PHP 8.1 "passing null to non-nullable" deprecation notice being thrown, but is not a PHP 8.1 bug.

In actual fact, this issue affected all PHP versions and could lead to incomplete classmaps when the code base contained files with huge heredocs/nowdocs.

The regex change (not completely) incidentally also fixes an issue with markers in a heredoc/nowdoc not being correctly handled. This bug could lead to "classes" being added to the class map which aren't actually classes.

Fixes 10037
2021-08-11 22:26:12 +02:00
jrfnl e729c418dd ClassMapGenerator: add test for "marker in text" bug
In PHP < 7.3, the heredoc/nowdoc marker was allowed to occur in the text, as long as it did not occur at the very start of the line.

This was also not handled correctly.

Ref: https://www.php.net/manual/en/migration73.incompatible.php#migration73.incompatible.core.heredoc-nowdoc
2021-08-11 22:23:24 +02:00