很高兴为大家带来又一个错误修复版本,进一步改进 Fruity 后端和 iOS 稳定性, 并修复使用正则表达式扫描内存时的问题。

下文未特别注明作者的改动,均由 [@hsorbo][] 和我在一系列愉快的结对编程中完成。

长话短说,改动如下:

  • memory:将内存扫描的正则表达式模式设为原始模式,使搜索在并非有效 UTF-8 的二进制区域中 也能可靠工作。感谢 @mrmacete!
  • web-service:关闭已移除动态接口的连接,避免它们一直残留,直至耗尽文件描述符。
  • network-stack:处理 TcpConnection 被突然销毁的情况。此前我们会释放 TCP PCB, 却未能通知任何仍然存活的 TcpIOSource 实例和被阻塞的 TcpInputStream.read() 调用。
  • network-stack:修复对等端关闭时竞争条件导致的 TCP 数据丢失。关闭操作会让我们释放 PCB, 随后 recv() 逻辑因为 PCB 已不存在而提前返回。此时 RX 缓冲区中可能仍有数据, 但应用无法看到它们。
  • network-stack:修复 TcpInputStream.read() 中的竞争条件:notify::pending-io 信号在调用 is_readable() 之后、连接信号处理程序之前触发。
  • fruity:使用 USB 产品字符串作为传输名称。
  • fruity:修复 iOS < 16 上的 USB 模式解析;此时模式是一个 3 字节 blob。
  • fruity:向上传递 USB 权限错误。
  • fruity:遇到 17 之前版本的 iOS 隧道服务时退出,而不是崩溃。
  • control-service:修复 CoreDevice 系统上的可靠性问题。在所有接口上监听的单个传输代理, 可能会在尝试从隧道内部与其通信时导致过早的 TCP RST。具体原因尚不清楚, 但我们已经确认,为每个动态接口/隧道设置一个代理可以解决问题。我们还观察到, 监听所有接口但仅限 IPv6 也能避免该问题。
  • meson:修复以 GLib 作为子项目时的 i/tvOS 编译。
  • meson:在 FreeBSD 上禁用 Fruity 及相关组件,因为我们现在依赖一个仅存在于自有 libusb 中的 API。如果有人希望在 FreeBSD 上使用这些后端,修复起来应该不会太难,非常欢迎提交 PR。