Skip to content

Merge upstream#71

Merged
Alkarex merged 14 commits into
freshrssfrom
merge-upstream
Mar 24, 2026
Merged

Merge upstream#71
Alkarex merged 14 commits into
freshrssfrom
merge-upstream

Conversation

@Alkarex
Copy link
Copy Markdown
Member

@Alkarex Alkarex commented Mar 21, 2026

No description provided.

jtojnar and others added 13 commits January 18, 2026 09:32
`get_headers()` actually return `parsed_headers` property which we did not previously set.
…_url

Make it clearer what request it is from and match the getter method name.
It is slightly cleaner.
…ted_url

Make it clearer what request it is from and match the getter method name.
In 1.9.0, we extended `Sniffer` to take any `Response`, not just `File`, and had `Locator` pass it `Response`s. Unfortunately, `Sniffer` is not final so that change might have broken existing third-party subclasses only accepting `File`. (Though it will at least not fail with fatal contravariance error since PHP does not enforce Liskov Substitution Principle for constructors.)

Let’s go back to `Sniffer` only accepting `File`.
This should make it easier to parse for humans.
On PHP < 8.1.21, we will not be able to disable `CURLOPT_ACCEPT_ENCODING` by setting it to `NULL`:
php/php-src#11433
`curl_setopt` with such values will be a no-op so the secound `curl_exec` will still fail with `CURLE_BAD_CONTENT_ENCODING` and return an empty body.
Even worse, it will still report 200 in `CURLINFO_HTTP_CODE` so `FileClient` will not throw an exception because the `status_code` property is not 0.

Let’s extract the code so that we can create a fresh `CurlHandle` and later make the `CURLOPT_ACCEPT_ENCODING` conditional.

Unfortunately, since PHP 8.0 changed `curl_init` to return `CurlHandle` instead of `resource`, and PHPStan has no simple way to make the return type depend on PHP version, we have to resort to an ugly hack using `typeAliases`.
Setting the CURLOPT_ENCODING to 'none' is not officially supported by
cURL. Setting it in case of cURL receiving an invalid Content-Encoding
header from the server and re-trying would not fix the issue.

The current implementation already sets cURL up to send an Accept-Encoding
header with all supported encodings a couple of lines above this change.
If the fetch still returns a BAD_CONTENT_ENCODING error, the server already
ignored the Accept-Encoding headers once.

This change, instead of sending 'none' in a re-try, disables cURL's content
encoding handling (in practice, handling compression).

Co-authored-by: Jan Tojnar <jtojnar@gmail.com>
@Alkarex Alkarex changed the base branch from master to freshrss March 21, 2026 22:53
Alkarex added a commit to Alkarex/FreshRSS that referenced this pull request Mar 23, 2026
@Alkarex Alkarex merged commit 144f082 into freshrss Mar 24, 2026
20 checks passed
@Alkarex Alkarex deleted the merge-upstream branch March 24, 2026 07:31
Alkarex added a commit to FreshRSS/FreshRSS that referenced this pull request Mar 24, 2026
doonga added a commit to greyrock-labs/home-ops that referenced this pull request May 13, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [freshrss/freshrss](https://freshrss.org/) ([source](https://github.com/FreshRSS/FreshRSS)) | minor | `1.28.1-alpine` → `1.29.0-alpine` |

---

### Release Notes

<details>
<summary>FreshRSS/FreshRSS (freshrss/freshrss)</summary>

### [`v1.29.0`](https://github.com/FreshRSS/FreshRSS/blob/HEAD/CHANGELOG.md#2026-05-10-FreshRSS-1290)

[Compare Source](FreshRSS/FreshRSS@1.28.1...1.29.0)

- Features
  - New sort order preferences at global, category, and feed levels [#&#8203;8234](FreshRSS/FreshRSS#8234)
  - New filtering by date of *Server modification date* [#&#8203;8131](FreshRSS/FreshRSS#8131), [#&#8203;8576](FreshRSS/FreshRSS#8576)
    - Corresponding search operator, e.g. `mdate:P1D` for finding articles modified by the author / server during the past day.
    - Especially useful for optimising the API synchronisation.
  - Use feed-provided icon [#&#8203;8633](FreshRSS/FreshRSS#8633)
  - New option to automatically mark new articles as read if an identical GUID already exists in the same category [#&#8203;8673](FreshRSS/FreshRSS#8673)
  - Automatic feed visibility/priority during search [#&#8203;8609](FreshRSS/FreshRSS#8609)
  - Add feed visibility filter to statistics view *unread dates* [#&#8203;8489](FreshRSS/FreshRSS#8489)
  - Add option to enable/disable notifications, also for PWA [#&#8203;8458](FreshRSS/FreshRSS#8458)
  - Add a form to create new user queries on the *User Queries* page [#&#8203;8623](FreshRSS/FreshRSS#8623)
  - Allow WebSub hub push from same private network [#&#8203;8450](FreshRSS/FreshRSS#8450)
  - Support category field in JSON feed import [#&#8203;8786](FreshRSS/FreshRSS#8786)
- Bug fixing
  - Fix wrong search `toString` in case of regex-looking string [#&#8203;8479](FreshRSS/FreshRSS#8479)
  - Fix article *last seen date* in case of feed errors [#&#8203;8646](FreshRSS/FreshRSS#8646)
  - Fix search expansion with backslash [#&#8203;8497](FreshRSS/FreshRSS#8497)
  - Fix user query parsing [#&#8203;8543](FreshRSS/FreshRSS#8543)
  - Fix search in shared user queries [#&#8203;8789](FreshRSS/FreshRSS#8789)
  - Fix redirect to wrong view after mark as read in *reader* and *global* views [#&#8203;8552](FreshRSS/FreshRSS#8552)
  - Fix SQLite paging when sorting by article length [#&#8203;8594](FreshRSS/FreshRSS#8594)
  - Fix change sorting during paging [#&#8203;8688](FreshRSS/FreshRSS#8688)
  - Fix SQL keyset pagination when sorting by category name [#&#8203;8597](FreshRSS/FreshRSS#8597)
  - Fix SQL duplicates in the user labels when sorting randomly [#&#8203;8626](FreshRSS/FreshRSS#8626)
  - Fix wrong error redirect in subscription management [#&#8203;8625](FreshRSS/FreshRSS#8625)
  - Fix do not include hidden feeds when counting total number of unread articles [#&#8203;8715](FreshRSS/FreshRSS#8715)
  - Update user modify date when changing extensions UserJS / UserCSS [#&#8203;8607](FreshRSS/FreshRSS#8607)
  - Non-strict OPML export [#eedefb](FreshRSS/FreshRSS@eedefbd)
- Security
  - Limit cURL to protocols HTTP, HTTPS [#&#8203;8713](FreshRSS/FreshRSS#8713)
  - Better sanitise favicon URLs [#&#8203;8714](FreshRSS/FreshRSS#8714)
  - New setting for `<iframe>` referrer allow list [#&#8203;8672](FreshRSS/FreshRSS#8672)
  - Fix email validation and allow error page for unverified email users [#&#8203;8582](FreshRSS/FreshRSS#8582)
  - Add `allowfullscreen` to `<iframe>` [#&#8203;8467](FreshRSS/FreshRSS#8467)
  - Rewrite `Set-Cookie` using native PHP support of `SameSite` [#&#8203;8447](FreshRSS/FreshRSS#8447), [#&#8203;8778](FreshRSS/FreshRSS#8778)
    - Sanitize lifetime of session cookies from `session.cookie-lifetime` in `php.ini`
  - Update to `<meta name="referrer" content="no-referrer" />` from deprecated `never` [#&#8203;8725](FreshRSS/FreshRSS#8725)
  - Preventive measure against search ingestion [#&#8203;8777](FreshRSS/FreshRSS#8777)
- UI
  - New option to hide sidebar by default [#&#8203;8528](FreshRSS/FreshRSS#8528)
  - Improve mobile view with multiple lines when thumbnails and summaries are shown [#&#8203;8631](FreshRSS/FreshRSS#8631)
  - New option to disable unread counter in tab title and favicon [#&#8203;8728](FreshRSS/FreshRSS#8728)
  - Show time since when a feed has problems [#&#8203;8670](FreshRSS/FreshRSS#8670)
  - Improve add feed UI [#&#8203;8683](FreshRSS/FreshRSS#8683)
  - Improve slider behaviour when using navigate back button [#&#8203;8496](FreshRSS/FreshRSS#8496), [#&#8203;8524](FreshRSS/FreshRSS#8524)
  - Improve consistency of slider behaviour after submitting form [#&#8203;8612](FreshRSS/FreshRSS#8612)
  - Create dynamic favicons from SVG instead of PNG canvas [#&#8203;8577](FreshRSS/FreshRSS#8577), [#&#8203;8588](FreshRSS/FreshRSS#8588)
  - Only display scrollbar everywhere if there's an overflow (especially for Chromium) [#&#8203;8542](FreshRSS/FreshRSS#8542)
  - Fix CSS padding of `.content pre code` [#&#8203;8620](FreshRSS/FreshRSS#8620)
  - Fix wrong navigation buttons layout on Chromium [#&#8203;8606](FreshRSS/FreshRSS#8606)
  - Fix don’t mark as read if middle click is outside of article link [#&#8203;8553](FreshRSS/FreshRSS#8553)
  - More robust JS [#&#8203;8595](FreshRSS/FreshRSS#8595)
  - Fix sidebar slide animation at narrow viewports [#&#8203;8747](FreshRSS/FreshRSS#8747)
  - Visually dim disabled users in user management table [#&#8203;8768](FreshRSS/FreshRSS#8768)
  - Improve multiple UI themes [#&#8203;8711](FreshRSS/FreshRSS#8711), [#&#8203;8732](FreshRSS/FreshRSS#8732),
    [#&#8203;8733](FreshRSS/FreshRSS#8733), [#&#8203;8734](FreshRSS/FreshRSS#8734), [#&#8203;8735](FreshRSS/FreshRSS#8735),
    [#&#8203;8736](FreshRSS/FreshRSS#8736), [#&#8203;8737](FreshRSS/FreshRSS#8737), [#&#8203;8738](FreshRSS/FreshRSS#8738),
    [#&#8203;8739](FreshRSS/FreshRSS#8739), [#&#8203;8743](FreshRSS/FreshRSS#8743), [#&#8203;8746](FreshRSS/FreshRSS#8746),
    [#&#8203;8749](FreshRSS/FreshRSS#8749), [#&#8203;8761](FreshRSS/FreshRSS#8761), [#&#8203;8781](FreshRSS/FreshRSS#8781),
    [#&#8203;8784](FreshRSS/FreshRSS#8784), [#&#8203;8785](FreshRSS/FreshRSS#8785)
  - Various UI and style improvements: [#&#8203;8537](FreshRSS/FreshRSS#8537), [#&#8203;8538](FreshRSS/FreshRSS#8538),
    [#&#8203;8541](FreshRSS/FreshRSS#8541), [#&#8203;8624](FreshRSS/FreshRSS#8624), [#&#8203;8731](FreshRSS/FreshRSS#8731),
    [#&#8203;8774](FreshRSS/FreshRSS#8774)
- Deployment
  - Also push Docker images to [GitHub registry](https://github.com/FreshRSS/FreshRSS/pkgs/container/freshrss) [#&#8203;8669](FreshRSS/FreshRSS#8669)
  - Improve support of PHP 8.5+ using `Pdo\Mysql` [#&#8203;8526](FreshRSS/FreshRSS#8526)
  - Add support for Podman in Makefile [#&#8203;8456](FreshRSS/FreshRSS#8456)
  - Re-add database status in installation check [#&#8203;8510](FreshRSS/FreshRSS#8510)
  - Docker / CLI: Allow chown/chmod to fail with warning [#&#8203;8635](FreshRSS/FreshRSS#8635)
- Extensions
  - New Webhook extension for automated RSS notifications [Extensions#456](FreshRSS/Extensions#456)
  - New LLM Classification extension to automatically tag incoming articles based on a prompt sent to an LLM [Extensions#458](FreshRSS/Extensions#458)
  - New extension methods to get typed configuration values [#&#8203;8696](FreshRSS/FreshRSS#8696)
  - New hook: `Minz_HookType::ActionExecute` [#&#8203;8599](FreshRSS/FreshRSS#8599), [#&#8203;8603](FreshRSS/FreshRSS#8603)
  - New hook to modify the list of feeds to actualize [#&#8203;8655](FreshRSS/FreshRSS#8655), [#&#8203;8675](FreshRSS/FreshRSS#8675)
  - Allow passing `Minz_HookType` as hook name in `registerHook()` [#&#8203;8600](FreshRSS/FreshRSS#8600)
  - Return more info and status from `httpGet()` [#&#8203;8700](FreshRSS/FreshRSS#8700)
  - Make `httpGet()` cache nullable [#&#8203;8705](FreshRSS/FreshRSS#8705)
  - Allow extensions’ configuration UI to use `select-input-changer` JavaScript helper [#&#8203;8721](FreshRSS/FreshRSS#8721)
- SimplePie
  - Bump upstream [#&#8203;8628](FreshRSS/FreshRSS#8628), [simplepie#71](FreshRSS/simplepie#71)
  - New function `get_icon_url()` for feed favicon [simplepie#974](simplepie/simplepie#974)
  - Fix Undefined array key in `get_thumbnail()` [#&#8203;8634](FreshRSS/FreshRSS#8634), [simplepie#970](simplepie/simplepie#970)
  - Fix int types for enclosures [#&#8203;8702](FreshRSS/FreshRSS#8702), [simplepie#975](simplepie/simplepie#975)
  - Fix HTTPS headers given to SimplePie, e.g. for some HTTP/2 cases [#&#8203;8742](FreshRSS/FreshRSS#8742)
- CLI
  - New `cli/purge.php` to apply purge policy [#&#8203;8740](FreshRSS/FreshRSS#8740)
- I18n
  - CLI validate language directory names [#&#8203;8767](FreshRSS/FreshRSS#8767)
  - New functions to handle plural, and new `timeago()` [#&#8203;8670](FreshRSS/FreshRSS#8670)
  - Improve German [#&#8203;8491](FreshRSS/FreshRSS#8491), [#&#8203;8557](FreshRSS/FreshRSS#8557), [#&#8203;8689](FreshRSS/FreshRSS#8689),
    [#&#8203;8704](FreshRSS/FreshRSS#8704)
  - Improve Italian [#&#8203;8517](FreshRSS/FreshRSS#8517), [#&#8203;8519](FreshRSS/FreshRSS#8519), [#&#8203;8554](FreshRSS/FreshRSS#8554),
    [#&#8203;8555](FreshRSS/FreshRSS#8555), [#&#8203;8556](FreshRSS/FreshRSS#8556), [#&#8203;8566](FreshRSS/FreshRSS#8566)
  - Improve Latvian [#&#8203;6553](FreshRSS/FreshRSS#6553)
  - Improve Polish [#&#8203;8536](FreshRSS/FreshRSS#8536)
  - Improve Portuguese [#&#8203;8649](FreshRSS/FreshRSS#8649)
  - Improve Simplified Chinese [#&#8203;8474](FreshRSS/FreshRSS#8474), [#&#8203;8475](FreshRSS/FreshRSS#8475), [#&#8203;8476](FreshRSS/FreshRSS#8476)
  - Improve Traditional Chinese [#&#8203;8709](FreshRSS/FreshRSS#8709), [#&#8203;8716](FreshRSS/FreshRSS#8716), [#&#8203;8723](FreshRSS/FreshRSS#8723),
    [#&#8203;8730](FreshRSS/FreshRSS#8730), [#&#8203;8748](FreshRSS/FreshRSS#8748)
  - Improve Spanish [#&#8203;8572](FreshRSS/FreshRSS#8572)
- Misc.
  - Initial conventions for AI agents and humans: `AGENTS.md`, `SKILLS.md`, `instructions.md` [#&#8203;8478](FreshRSS/FreshRSS#8478)
  - Update to CSSXPath 1.5.0 [#&#8203;8642](FreshRSS/FreshRSS#8642)
  - Update to PHPMailer 7.0.2 [#&#8203;8483](FreshRSS/FreshRSS#8483)
  - SQL improve PHP syntax uniformity [#&#8203;8604](FreshRSS/FreshRSS#8604)
  - Trim SQL whitespace before parenthesis [#&#8203;8522](FreshRSS/FreshRSS#8522)
  - Improve PHP code [#&#8203;8627](FreshRSS/FreshRSS#8627), [#&#8203;8644](FreshRSS/FreshRSS#8644), [#&#8203;8753](FreshRSS/FreshRSS#8753),
    [#&#8203;8697](FreshRSS/FreshRSS#8697)
  - Add dev legacy rules PHPCS 3 [#&#8203;8645](FreshRSS/FreshRSS#8645)
  - Update dev dependencies [#&#8203;8469](FreshRSS/FreshRSS#8469), [#&#8203;8480](FreshRSS/FreshRSS#8480), [#&#8203;8499](FreshRSS/FreshRSS#8499),
    [#&#8203;8545](FreshRSS/FreshRSS#8545), [#&#8203;8546](FreshRSS/FreshRSS#8546), [#&#8203;8547](FreshRSS/FreshRSS#8547),
    [#&#8203;8617](FreshRSS/FreshRSS#8617), [#&#8203;8638](FreshRSS/FreshRSS#8638), [#&#8203;8660](FreshRSS/FreshRSS#8660),
    [#&#8203;8661](FreshRSS/FreshRSS#8661), [#&#8203;8662](FreshRSS/FreshRSS#8662), [#&#8203;8663](FreshRSS/FreshRSS#8663),
    [#&#8203;8664](FreshRSS/FreshRSS#8664), [#&#8203;8665](FreshRSS/FreshRSS#8665), [#&#8203;8666](FreshRSS/FreshRSS#8666),
    [#&#8203;8667](FreshRSS/FreshRSS#8667), [#&#8203;8668](FreshRSS/FreshRSS#8668), [#&#8203;8685](FreshRSS/FreshRSS#8685),
    [#&#8203;8752](FreshRSS/FreshRSS#8752), [#&#8203;8754](FreshRSS/FreshRSS#8754), [#&#8203;8755](FreshRSS/FreshRSS#8755),
    [#&#8203;8756](FreshRSS/FreshRSS#8756), [#&#8203;8757](FreshRSS/FreshRSS#8757), [#&#8203;8758](FreshRSS/FreshRSS#8758),
    [#&#8203;8772](FreshRSS/FreshRSS#8772), [#&#8203;8798](FreshRSS/FreshRSS#8798)

</details>

---

### Configuration

📅 **Schedule**: (in timezone America/New_York)

- Branch creation
  - At any time (no schedule defined)
- Automerge
  - At any time (no schedule defined)

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these updates again.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Mend Renovate](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xNjAuNyIsInVwZGF0ZWRJblZlciI6IjQzLjE2MC43IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL21pbm9yIl19-->

Co-authored-by: todd <tpunderson@greyrock.io>
Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants