From 884aa24677f418c3908f92b158482a5ce75a498d Mon Sep 17 00:00:00 2001
From: Tunglies <77394545+Tunglies@users.noreply.github.com>
Date: Sun, 8 Nov 2026 10:18:37 +0800
Subject: [PATCH] fix(network): limit text response bodies to 4 MiB
Closes #8344
Closes #8359
---
Cargo.lock | 1 +
Changelog.md | 1 +
src-tauri/Cargo.toml | 1 +
src-tauri/src/utils/network.rs | 5 +++++
4 files changed, 8 insertions(+)
diff --git a/Cargo.lock b/Cargo.lock
index 4085c0297..51e6036f7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1107,6 +1107,7 @@ dependencies = [
"futures",
"gethostname",
"getrandom 0.4.3",
+ "http-body-util",
"libc",
"log",
"nanoid",
diff --git a/Changelog.md b/Changelog.md
index 9cc440c25..18b0bbbde 100644
--- a/Changelog.md
+++ b/Changelog.md
@@ -25,6 +25,7 @@
🐞 修复问题
- 修复检测更新后又发布新版时,应用内更新失败
+- 修复订阅响应过大导致内存占用过高,限制单次下载为 4 MiB
- 修复全局模式默认停在 `DIRECT` 或 `REJECT` 导致流量未经代理,现自动切换到第一个策略组
- 修复订阅中未加引号的 REALITY `short-id`(如 `1234e123`)被误读为数字,导致订阅无法启用
diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml
index 671d2c214..f6e3d7c37 100755
--- a/src-tauri/Cargo.toml
+++ b/src-tauri/Cargo.toml
@@ -64,6 +64,7 @@ dunce = "1.0.5"
nanoid = "0.5"
chrono = { workspace = true }
boa_engine = "0.22.0"
+http-body-util = "0.1.4"
percent-encoding = "2.3.2"
reqwest = { workspace = true }
sysproxy = { git = "https://github.com/clash-verge-rev/sysproxy-rs.git", branch = "main", features = [
diff --git a/src-tauri/src/utils/network.rs b/src-tauri/src/utils/network.rs
index 89d2ddc6f..1eba283ed 100644
--- a/src-tauri/src/utils/network.rs
+++ b/src-tauri/src/utils/network.rs
@@ -228,6 +228,11 @@ impl NetworkManager {
}
};
+ let response: tauri::http::Response = response.into();
+ let response = reqwest::Response::from(
+ response.map(|body| reqwest::Body::wrap(http_body_util::Limited::new(body, 4 * 1024 * 1024))),
+ );
+
let status = response.status();
let headers = response.headers().to_owned();
let body = match response.text().await {