НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.3 >> [I128-2526] DP_Irbis64Native должен отклонять поврежденные блоки L01📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.3 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль DP_Irbis64Native - Нативный провайдер данных к файлам СУБД ИРБИС 64/64+
Завершено: 29.06.2026 14:26
Проблема:
При чтении блока L01 native-провайдер разбирает результат InvBlockRec::Parse(), но не проверяет успешность разбора и базовую корректность структуры блока.
При записи блока L01 также не выполняется предварительная проверка номера блока и структуры InvBlockRec. В результате некорректный номер блока, несогласованное количество ключей/терминов, неверная свободная позиция или битые ссылки постингов могут пройти дальше как допустимые данные.
Ожидаемое поведение:
Чтение и запись L01 должны прерываться ошибкой ERR_FILEINVERT, если номер блока некорректен или структура блока не соответствует формату L01.
Что изменяется:
В L01File::ReadBlock() добавляется проверка положительного номера блока, результата Parse() и структуры считанного блока.
В L01File::WriteBlock() добавляется проверка положительного номера блока, синхронизация номера в заголовке блока и проверка структуры перед записью.
Добавлен локальный валидатор блока L01, который проверяет номер блока, количество терминов, границы области свободного места, согласованность массивов ключей и терминов, длины терминов, смещения ключей и положительные ссылки на цепочки IFP.
После изменения: Поврежденный или некорректно сформированный блок L01 не используется и не записывается молча; ошибка обнаруживается на границе чтения или записи L01.