11004 Commits (3f243d37c30d2cdeb378b483c8172d4ef5e100a8)
 

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 3 years ago
Jordi Boggiano 6ab1b6a7d2
Regex simplifications 3 years ago
Jordi Boggiano 3f79e59f69
Add test assertions for heredoc marker inside the text 3 years ago
Jordi Boggiano f6c446bdd7
Tweak to allow matching delimiter within the string 3 years ago
Jordi Boggiano c44be998ab
Undo new stripping code and fix regex 3 years ago
powellblyth 5e75017166
Just some comments with 'it's' that should have been 'its' (#10071)
Co-authored-by: Toby Powell-Blyth <tobypowell-blyth@elasticstage.com>
3 years ago
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.
3 years ago
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.
3 years ago
Jordi Boggiano d3c176ec69
PHPStan Level 5 (#10070)
* Bump PHPStan to level 5

* Update seld/phar-utils to latest

* Add phpstan-setup / phpstan scripts
3 years ago
Jordi Boggiano 4b8585d767
Update changelog 3 years ago
Jordi Boggiano de5f18d64b
Update IRC URL too in composer.json 3 years ago
Jordi Boggiano b583310476
Allow ircs protocol for support.irc 3 years ago
Jordi Boggiano 17b972f2a9
Update community page 3 years ago
Ryan McCue 812cf836f3
Add documentation for v2 repository fields (#10033) 3 years ago
Jordi Boggiano 74b231a4bc
Fix lib-openssl detection on FreeBSD, fixes #10046 3 years ago
Jordi Boggiano 9727adf63b
Fix init performance when plugin commands are not needed, fixes #10064 3 years ago
Juliette 5f48f87501
PHPUnit: move environment variable into PHPUnit config file (#10062)
Co-authored-by: jrfnl <jrfnl@users.noreply.github.com>
3 years ago
Jordi Boggiano e5a50d1f06
Merge pull request #10061 from Seldaek/deprecations
Fix the remainder of PHP8.1 deprecation warnings
3 years ago
Jordi Boggiano a586a753df
Fix all remaining php8.1 test suite deprecations 3 years ago
Jordi Boggiano b77fce8a4f
More deprecation fixes by using ProcessExecutorMock and a couple of PackageInterface type fixes 3 years ago
Jordi Boggiano 6aa2d15868
Introduce ProcessExecutorMock to fix deprecations and amount of mocking pain 3 years ago
Jordi Boggiano 5062619046
Fix deprecation warnings with strpos receiving null 3 years ago
Jordi Boggiano 0b09e08f4b
Fix direct deprecations 3 years ago
Jordi Boggiano 20b7e395b4
Fail tests when deprecations are triggered in the code, refs #10038 3 years ago
Jordi Boggiano c5a02a2b58
Fix return value of ProcessExecutor::getErrorOutput, closes #10054 3 years ago
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)
3 years ago
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]
3 years ago
Jordi Boggiano 3dcc6c1514
Make return value explicit 3 years ago
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
3 years ago
Jordi Boggiano cfe718fa43
Fix usage of getRequiredPackage, closes #10052 3 years ago
Jordi Boggiano b232ee6663
Fix test 3 years ago
Jordi Boggiano 8ce0ea300e
Fix pear repo preventing self-update from functioning, fixes #10049 3 years ago
Jordi Boggiano a72784c4da
Merge pull request #10057 from nicholsonjf/docs-double-pipe-note
Note in docs about how single pipes are treated
3 years ago
Jordi Boggiano 5c201687e5
Fix 7zip issues on windows when mixing forward and backslashes, fixes #10058 3 years ago
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
3 years ago
Jordi Boggiano 91a1a471db
Fix path repo bug causing symlinks to be left behind when uninstalling, fixes #10023 3 years ago
Jordi Boggiano d465df434c
Make sure diagnose command can run without proc_open, refs #9253 3 years ago
Jordi Boggiano 60fe67086e
Make sure proc_open is not required for basic installs, refs #9253 3 years ago
Jordi Boggiano d6f4111f35
Fix php 5.3 support 3 years ago
Jordi Boggiano 46f2d9de48
Fix php 5.3 support 3 years ago
Jordi Boggiano ddd7920d2a
Fix corrupt archives in cache from getting the installs stuck forever, and make sure it fails only once, fixes #10028 3 years ago
Jordi Boggiano e49f24e355
Switch phar signatures to sha512 3 years ago
小克 d9a94b376a
Update the Composer plugin API version to 2.1.0 3 years ago
James Nicholson 2d79f3381b Single pipe note 3 years ago
Jordi Boggiano 4da1a2d43a
Merge pull request #10050 from jrfnl/feature/10037-classmapgenerator-bug-fixes
ClassMapGenerator: fix two bugs (long heredocs + markers in text)
3 years ago
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))
...
```
3 years ago
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)
...
```
3 years ago
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
3 years ago
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
3 years ago
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
3 years ago