From 54d1593dd2a713c572379e56f54ad26bb69cd094 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BD=95=E5=86=A0=E5=B3=B0?= <33317070@qq.com> Date: Tue, 2 Jun 2026 14:37:11 +0800 Subject: [PATCH] fix #702 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复解压行为在包体内文件被篡改后,会无限尝试的问题。 --- .../Operation/internal/DownloadPackageBundleOperation.cs | 3 ++- .../Operation/internal/UnityDownloadFileOperation.cs | 6 ++++++ .../Operation/internal/UnityDownloadLocalFileOperation.cs | 2 ++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/DownloadPackageBundleOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/DownloadPackageBundleOperation.cs index bacb2bb6..48dfa8ea 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/DownloadPackageBundleOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/DownloadPackageBundleOperation.cs @@ -95,7 +95,8 @@ namespace YooAsset } else { - if (IsWaitForAsyncComplete == false && _failedTryAgain > 0) + // 注意:本地文件(解压/导入)校验失败属于确定性失败,重试只会重复读取同一文件,直接判定失败防止无限重试。 + if (IsWaitForAsyncComplete == false && _failedTryAgain > 0 && _unityDownloadFileOp.VerifyFailed == false) { _steps = ESteps.TryAgain; YooLogger.Warning($"Failed download : {_unityDownloadFileOp.URL} Try again !"); diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadFileOperation.cs index cb022017..209e582d 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadFileOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadFileOperation.cs @@ -27,6 +27,12 @@ namespace YooAsset /// public int RefCount { private set; get; } + /// + /// 文件校验是否失败 + /// 注意:本地文件(解压/导入)校验失败属于确定性失败,重试无意义,上层不应重试。 + /// + public bool VerifyFailed { protected set; get; } = false; + internal UnityDownloadFileOperation(DefaultCacheFileSystem fileSystem, PackageBundle bundle, string url) : base(url) { _fileSystem = fileSystem; diff --git a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadLocalFileOperation.cs b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadLocalFileOperation.cs index b3961ec7..b1632a5c 100644 --- a/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadLocalFileOperation.cs +++ b/Assets/YooAsset/Runtime/FileSystem/DefaultCacheFileSystem/Operation/internal/UnityDownloadLocalFileOperation.cs @@ -133,6 +133,8 @@ namespace YooAsset } else { + // 注意:本地内置文件被篡改或损坏时校验会失败,重试只会重复读取同一文件,因此标记为不可重试。 + VerifyFailed = true; _steps = ESteps.Done; Status = EOperationStatus.Failed; Error = _verifyOperation.Error;