PocketBase v0.40.6:缩略图有了像素上限,更新命令也不再走 GitHub
这次 v0.40.6(2026-10-23)里值得单独拿出来说的只有两件事:缩略图生成增加了一个全局像素上限,用来压低 OOM 风险;以及 ./pocketbase update 的拉取地址从 GitHub 换到了新 host。其余是 fileblob 的边界检查。
缩略图的像素上限,以及它为什么只是权宜之计
新版本给缩略图生成加了一个全局的 WxH 像素数限制。默认值给得比较宽松:250<<20,即 262144000 像素,可以通过环境变量 PB_THUMBS_MAX_SOURCE_PIXELS 调整。
根因在 Go 标准库:image.Decode 没有解码选项,无法在解码阶段限制资源,相关提案是 golang/go#27830「image: decoding options」。该问题最初由 @reload3d 私下报告,但因为属于已知的 Go 缺陷,最终按公开 issue 处理。
作者在 release notes 里写得很直接:这个 workaround 不彻底,缩略图生成仍然是 PocketBase 潜在 OOM 的主要来源。后续要寻找更彻底的方案,包括在 CGO 可移植性改善后切换到 libvips 或类似库,前置条件是 golang/go#81450(CGO portability improvements)。
更新命令改从 ganigeorgiev.com 拉新版本
GitHub 上的更新命令已被替换,改为从新 host 拉取,背景见 discussions/7841。
需要注意两点:
- 这很可能是 GitHub 上的最后一个 release;
- 下次执行
./pocketbase update时,新版本会从https://ganigeorgiev.com获取——该地址目前还没有内容。
也就是说,依赖 GitHub release 页面做版本发现或自动升级的脚本,现在就得跟着改,否则会在下一次发版时静默失效。
fileblob 增加 bucket 逃逸检查
fileblob 补了额外的 bucket 逃逸检查。这一条针对的是把文件系统抽象当独立组件使用、绕过 PocketBase 自身校验的场景,属于兜底性质的加固。
v0.22.57 的回移内容
同一天发布的 v0.22.57 把 v0.40.6 的几项改动回移到了旧分支:
- 缩略图像素上限(默认
250<<20,环境变量PB_THUMBS_MAX_SOURCE_PIXELS可调); golang.org/x/依赖升级,见 discussions/7865;- GitHub Action 的最低 Go 版本提到 1.27.3,因为该版本包含针对近期 eMudhra CA 失陷的安全修复。作者说明没有在两天前紧急发版,是因为对多数 PocketBase 服务器而言影响不算严重,利用前提是攻击者已经具备 MiTM 能力,但仍建议升级。同时要确认 OS / Docker 镜像也更新过,保证
ca-certificates包是最新的。
两件可以直接做的事
自己的上传接口不要只依赖 PB_THUMBS_MAX_SOURCE_PIXELS:在入口处对图片做一次像素数/尺寸预检并设置超时,把超大图挡在解码之前。
CI 或运维脚本里凡是按 GitHub release 判断版本、下载产物的逻辑,趁新 host 还没内容之前改成可配置的更新源。
release notes 原文:v0.40.6