Bug 60295
| Summary: | Некорректная работа Digest::CRC1#update | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vladislav Glinkin <glinkinvd> |
| Component: | gem-digest-crc | Assignee: | majioa <majioa> |
| Status: | NEW --- | QA Contact: | qa-sisyphus |
| Severity: | normal | ||
| Priority: | P5 | CC: | majioa |
| Version: | unstable | ||
| Hardware: | x86_64 | ||
| OS: | Linux | ||

Description
Vladislav Glinkin 2026-08-27 16:50:21 MSKВ `gem-digest-crc-0.6.5` метод `Digest::CRC1#update` возвращает результат, отличный от результата `Digest::CRC1.checksum` для одних и тех же входных данных. При передаче строки целиком получается `0xDD`, а при побайтовой обработке через `update` — `0x1DD`. Версия пакета: - gem-digest-crc-0.6.5-alt1 Шаги воспроизведения: 1) Создать файл: ``` $ cat > reproduce.rb <<'EOF' #!/usr/bin/env ruby require "digest/crc1" data = "123456789" class_api = Digest::CRC1.checksum(data) crc = Digest::CRC1.new data.each_byte do |byte| crc.update(byte.chr) end stream_api = crc.checksum puts "data: #{data.inspect}" puts "class API: 0x#{class_api.to_s(16).upcase}" puts "stream API: 0x#{stream_api.to_s(16).upcase}" exit 0 if class_api == stream_api exit 1 EOF ``` 2) `$ ruby reproduce.rb` Фактический результат: ``` data: "123456789" class API: 0xDD stream API: 0x1DD ``` Ожидаемый результат: Оба способа вычисления обрабатывают одни и те же данные и должны возвращать одинаковый CRC: ``` data: "123456789" class API: 0xDD stream API: 0xDD ``` Дополнительная информация: Это приводит к несовместимости между однократным и потоковым способом вычисления CRC1. Приложение, которое обрабатывает данные частями через `Digest::CRC1#update`, может получить другой, некорректный CRC по сравнению с вычислением тех же данных целиком. Если сравнивать поведение, к примеру, с CRC16 - то с теми же входными данными проблем не наблюдается.