通过


TAR 读取 API 在读取时验证标头校验和

TarReader 类现在在读取过程中验证 TAR 存档条目的校验和。 如果条目的校验和无效, TarReader 则引发一个 InvalidDataException。 此更改通过确保在处理过程中检测到损坏或篡改的 TAR 文件并对其进行标记,从而提高数据完整性。

已引入的版本

.NET 11 预览版 1

以前的行为

以前,读取具有无效校验和的 TAR 存档时, TarReader 忽略了校验和不匹配,并继续处理存档而不引发异常。

示例代码:

using System.Formats.Tar;
using System.IO;

using var stream = File.OpenRead("bad-cksum.tar");
using var reader = new TarReader(stream);

while (reader.GetNextEntry() is not null)
{
    // Process entries, even if the checksum is invalid.
}

如果 TAR 文件 bad-cksum.tar 包含具有无效校验和的条目,则代码将处理该条目而不指示问题。

新行为

从 .NET 11 开始,读取具有无效校验和的 TAR 存档时, TarReader 会引发 InvalidDataException 并停止处理存档。 异常消息指示校验和验证失败。

破坏性变更的类型

此更改为行为更改

更改原因

引入了此更改以提高库的可靠性和安全性 System.Formats.Tar 。 通过验证校验和, TarReader 可以检测和防止使用损坏或篡改的 TAR 文件,确保只处理有效的数据。 有关详细信息,请参阅 dotnet/runtime#118577dotnet/runtime#117455

如果应用程序依赖于 TarReader 处理 TAR 存档:

  • 更新代码以处理校验和验证失败时可能抛出的异常InvalidDataException
  • 确保正在处理的 TAR 文件有效且具有正确的校验和。 如果遇到校验和失败,请验证源 TAR 文件的完整性。
  • 如果需要针对特定方案处理具有无效校验和的 TAR 文件,请考虑实现自定义错误处理或预处理文件以更正校验和。

更新的示例:

using System.Formats.Tar;
using System.IO;

try
{
    using var stream = File.OpenRead("archive.tar");
    using var reader = new TarReader(stream);

    while (reader.GetNextEntry() is not null)
    {
        // Process entries.
    }
}
catch (InvalidDataException ex)
{
    Console.WriteLine($"Error reading TAR archive: {ex.Message}");
    // Handle invalid checksum scenario.
}

受影响的 API