SimplePie fix parsing of HTTP Links (#4283)

* SimplePie fix parsing of HTTP Links
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Link
* https://datatracker.ietf.org/doc/html/rfc8288

Before, SimplePie was not able to parse something like

```
Link: <https://pubsubhubbub.appspot.com>; rel="hub", <https://pubsubhubbub.superfeedr.com>; rel=hub, <https://websubhub.com/hub>; rel="hub"
```
pull/4287/head
Alexandre Alapetite 3 years ago committed by GitHub
parent 7d00ad8ed7
commit b0a63355b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      app/Models/Feed.php
  2. 12
      lib/SimplePie/SimplePie.php

@ -352,9 +352,15 @@ class FreshRSS_Feed extends Minz_Model {
} }
$links = $simplePie->get_links('self'); $links = $simplePie->get_links('self');
$this->selfUrl = $links[0] ?? ''; $this->selfUrl = empty($links[0]) ? '' : checkUrl($links[0]);
if ($this->selfUrl == false) {
$this->selfUrl = '';
}
$links = $simplePie->get_links('hub'); $links = $simplePie->get_links('hub');
$this->hubUrl = $links[0] ?? ''; $this->hubUrl = empty($links[0]) ? '' : checkUrl($links[0]);
if ($this->hubUrl == false) {
$this->hubUrl = '';
}
if ($loadDetails) { if ($loadDetails) {
// si on a utilisé l’auto-discover, notre url va avoir changé // si on a utilisé l’auto-discover, notre url va avoir changé

@ -2726,12 +2726,14 @@ class SimplePie
if (isset($this->data['headers']['link'])) if (isset($this->data['headers']['link']))
{ {
$link_headers = $this->data['headers']['link']; $link_headers = $this->data['headers']['link'];
if (is_string($link_headers)) { if (is_array($link_headers)) {
$link_headers = array($link_headers); $link_headers = implode(',', $link_headers);
} }
$matches = preg_filter('/<([^>]+)>; rel='.preg_quote($rel).'/', '$1', $link_headers); // https://datatracker.ietf.org/doc/html/rfc8288
if (!empty($matches)) { if (is_string($link_headers) &&
return $matches; preg_match_all('/<(?P<uri>[^>]+)>\s*;\s*rel\s*=\s*(?P<quote>"?)' . preg_quote($rel) . '(?P=quote)\s*(?=,|$)/i', $link_headers, $matches))
{
return $matches['uri'];
} }
} }

Loading…
Cancel
Save