[I128-2526] DP_Irbis64Native должен отклонять поврежденные блоки L01


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте 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.