API чтения TAR проверяют контрольные суммы заголовков при чтении

Теперь 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.
}

Если ФАЙЛ bad-cksum.tar TAR содержал запись с недопустимой контрольной суммой, код обработает запись без каких-либо указаний на проблему.

Новое поведение

Начиная с .NET 11, при чтении архива TAR с некорректной контрольной суммой, TarReader вызывает InvalidDataException и останавливает обработку архива. Сообщение об исключении указывает на сбой проверки контрольной суммы.

Тип разрушающего изменения

Это изменение поведения.

Причина изменения

Это изменение было введено для повышения надежности и безопасности библиотеки System.Formats.Tar . Проверяя контрольные суммы, TarReader можно обнаружить и предотвратить использование поврежденных или измененных ФАЙЛОВ TAR, гарантируя обработку только допустимых данных. Дополнительные сведения см. в разделе dotnet/runtime#118577 и dotnet/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