Skip to content

v3.18.2

Latest

Choose a tag to compare

@syswave-dev syswave-dev released this 08 Nov 10:58
· 5 commits to main since this release

This tag covers the changes listed under 3.18.1 and 3.18.2 in the CHANGELOG; 3.18.1 was never tagged.

Fixed

  • The SSRF guard now connects to the address it checked. The static fetch path resolved a hostname, checked the answers, and then let the HTTP client resolve the name a second time for the socket, so a name that changed its answer in between (DNS rebinding) could reach an internal address. This was documented as an accepted residual since v3.3.0. The guard now hands the validated addresses to the connection (undici Agent with a pinned lookup), one DNS query per request instead of two, and every redirect hop is pinned the same way. The Playwright sidecar is unchanged: Chromium resolves names itself, and that residual stays documented in SECURITY.md.
  • YouTube URLs failed with fetch failed because the response headers exceeded the default limit of 16 KB. The server now starts with --max-http-header-size=65536.
  • Pages that split one piece of writing across several <article> blocks now keep all of them. Blocks that open with the same link count as a series and are converted and joined without duplicates. Reported as source: article-series; PULLMD_ARTICLE_SERIES=off turns it off.

Changed

  • SECURITY.md states what a vulnerability report needs: a reproduction on a running instance of the current release. Re-reports of listed residuals and proofs of concept that never ran against pullmd are closed without reply.

Self-hosters: only the pullmd image changes behaviour; the sidecar images are rebuilt unchanged.