diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98f8745e..d7fdad6e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,7 +55,6 @@ jobs: - '8.4' name: "PHP: ${{ matrix.php }}" - continue-on-error: ${{ matrix.php == '8.4' }} steps: - name: Checkout code @@ -71,15 +70,8 @@ jobs: # Install dependencies and handle caching in one go. # @link https://github.com/marketplace/actions/install-composer-dependencies - - name: "Install Composer dependencies (PHP < 8.4)" - if: ${{ matrix.php < '8.4' }} - uses: "ramsey/composer-install@v2" - - - name: "Install Composer dependencies (PHP 8.4)" - if: ${{ matrix.php >= '8.4' }} + - name: "Install Composer dependencies" uses: "ramsey/composer-install@v2" - with: - composer-options: --ignore-platform-reqs - name: Run unit tests run: composer test diff --git a/.gitignore b/.gitignore index 703d8e51..94dd5ecc 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ SimplePie.compiled.php bin/ vendor/ composer.lock +phpstan.neon phpunit.xml .php-cs-fixer.cache .phpunit.cache/ diff --git a/CHANGELOG.md b/CHANGELOG.md index d097fdad..69b3dc9d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Changed - Use `idn_to_ascii` function instead of `idna_convert` library (requires `intl` extension or a [polyfill](https://github.com/symfony/polyfill-intl-idn)) by @jtojnar in [#785](https://github.com/simplepie/simplepie/pull/785) +- Use native `gzdecode` function instead of internal PHP implementation by @jtojnar in [#882](https://github.com/simplepie/simplepie/pull/882) ### Removed @@ -26,6 +27,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - The method `SimplePie\SimplePie::set_file()` is deprecated, use `SimplePie\SimplePie::set_http_client()` or `SimplePie\SimplePie::set_raw_data()` instead - The method `SimplePie\Sanitize::pass_file_data()` is deprecated, use `SimplePie\Sanitize::set_http_client()` instead - Passing multiple URLs to `SimplePie\SimplePie::set_feed_url()` is deprecated. You can create separate `SimplePie` instance per feed and then use `SimplePie::merge_items()` to get a single list of items. ([#795](https://github.com/simplepie/simplepie/pull/795)) +- The `SimplePie\Gzdecode` class is deprecated. You can use native [`gzdecode`](https://www.php.net/manual/en/function.gzdecode.php) function by @jtojnar in [#882](https://github.com/simplepie/simplepie/pull/882) ## [1.8.0](https://github.com/simplepie/simplepie/compare/1.7.0...1.8.0) - 2023-01-20 diff --git a/phpstan.neon b/phpstan.neon.dist similarity index 100% rename from phpstan.neon rename to phpstan.neon.dist diff --git a/src/File.php b/src/File.php index b56fac34..9099c849 100644 --- a/src/File.php +++ b/src/File.php @@ -236,12 +236,11 @@ public function __construct(string $url, int $timeout = 10, int $redirects = 5, switch (strtolower(trim($contentEncodingHeader, "\x09\x0A\x0D\x20"))) { case 'gzip': case 'x-gzip': - $decoder = new \SimplePie\Gzdecode($this->body); - if (!$decoder->parse()) { + if (($decompressed = gzdecode($this->body)) === false) { $this->error = 'Unable to decode HTTP "gzip" stream'; $this->success = false; } else { - $this->body = trim($decoder->data); + $this->body = trim($decompressed); } break; @@ -250,7 +249,7 @@ public function __construct(string $url, int $timeout = 10, int $redirects = 5, $this->body = $decompressed; } elseif (($decompressed = gzuncompress($this->body)) !== false) { $this->body = $decompressed; - } elseif (function_exists('gzdecode') && ($decompressed = gzdecode($this->body)) !== false) { + } elseif (($decompressed = gzdecode($this->body)) !== false) { $this->body = $decompressed; } else { $this->error = 'Unable to decode HTTP "deflate" stream'; diff --git a/src/Gzdecode.php b/src/Gzdecode.php index 6adfc05c..f331d1dc 100644 --- a/src/Gzdecode.php +++ b/src/Gzdecode.php @@ -11,6 +11,8 @@ * Decode 'gzip' encoded HTTP data * * @link http://www.gzip.org/format.txt + * @link https://www.php.net/manual/en/function.gzdecode.php + * @deprecated since SimplePie 1.9.0, use `gzdecode` function instead. */ class Gzdecode { diff --git a/src/IRI.php b/src/IRI.php index 25b342a8..8543b2a5 100644 --- a/src/IRI.php +++ b/src/IRI.php @@ -297,19 +297,10 @@ public static function absolutize($base, $relative) protected function parse_iri(string $iri) { $iri = trim($iri, "\x20\x09\x0A\x0C\x0D"); - if (preg_match('/^((?P[^:\/?#]+):)?(\/\/(?P[^\/?#]*))?(?P[^?#]*)(\?(?P[^#]*))?(#(?P.*))?$/', $iri, $match)) { - if ($match[1] === '') { - $match['scheme'] = null; - } - if ($match[3] === '') { - $match['authority'] = null; - } - if (!isset($match[6]) || $match[6] === '') { - $match['query'] = null; - } - if (!isset($match[8]) || $match[8] === '') { - $match['fragment'] = null; - } + if (preg_match('/^(?:(?P[^:\/?#]+):)?(:?\/\/(?P[^\/?#]*))?(?P[^?#]*)(?:\?(?P[^#]*))?(?:#(?P.*))?$/', $iri, $match, \PREG_UNMATCHED_AS_NULL)) { + // TODO: Remove once we require PHP ≥ 7.4. + $match['query'] = $match['query'] ?? null; + $match['fragment'] = $match['fragment'] ?? null; return $match; } diff --git a/src/SimplePie.php b/src/SimplePie.php index a02138ec..73d4ed7b 100644 --- a/src/SimplePie.php +++ b/src/SimplePie.php @@ -1520,7 +1520,7 @@ public function strip_htmltags($tags = '', ?bool $encode = null) } $this->sanitize->strip_htmltags($tags); if ($encode !== null) { - $this->sanitize->encode_instead_of_strip($tags); + $this->sanitize->encode_instead_of_strip($encode); } }