Что означает код HRESULT 0x80093001 (OSS_MORE_BUF)?

 
Предыдущий Следующий
CRYPT_E_OBJECT_LOCATOR_OBJECT_NOT_FOUND OSS_NEGATIVE_UINTEGER

OSS_MORE_BUF

OSS_MORE_BUF (0x80093001) — результат OSS ASN.1 runtime для исчерпания выходного буфера, принадлежащего вызывающему коду. Encoder или decoder требуется больше места, чем предоставил вызывающий код; поля по pointers могут сделать PDU больше sizeof его верхнеуровневой C-структуры. Поскольку запрошенное и выделенное число байтов имеют решающее значение для этого условия, диапазон HRESULT Microsoft следует рассматривать вместе с документацией return code OSS Nokalva. Начните исследование с фиксации было ли отключено automatic allocation, затем отделите закодированное значение от сгенерированных артефактов, аргументов вызова и runtime-пакета, реально загруженного процессом.

Найдите точную границу codec

На границе исчерпания выходного буфера, принадлежащего вызывающему коду зафиксируйте первую OSS-функцию, вернувшую значение, и отметьте, выполнялись ли encode, decode, copy, compare, constraint validation или настройка trace. Сохраните выбранный PDU, правила кодирования и поля PDU, владеющие строками, массивами или off-shoot structures; иначе внешний certificate/security wrapper может скрыть полезный результат codec за общей ошибкой.

Данные, которые стоит сохранить

ЗапишитеДиагностическое значение
запрошенное и выделенное число байтовЛокализует конкретное сообщение, allocation, module или границу API
было ли отключено automatic allocationОтделяет поведение, зависящее от payload, от состояния сборки и процесса
поля PDU, владеющие строками, массивами или off-shoot structuresДелает сравнение воспроизводимым без изменения исходного артефакта

Контролируемое воспроизведение

  1. попросите runtime определить encoded length до allocation
  2. повторите с runtime allocation в качестве контроля
  3. разместите guard bytes вокруг тестового buffer, чтобы выявить предположения о переполнении

При проверке сохраняйте исходные байты или object graph неизменными попросите runtime определить encoded length до allocation. Изменение было ли отключено automatic allocation после reload, замены plugin, restart или развертывания schema является данными о состоянии runtime, а не основанием выбрасывать reproducer. Когда поля PDU, владеющие строками, массивами или off-shoot structures указывает на конкретное сообщение, сохраняйте криптографический хеш и минимальный безопасный образец вместо записи certificate, subscriber, credential или private-key material.

С чем не следует путать это состояние

В отличие от OSS_MORE_INPUT, весь encoded input может уже присутствовать; не хватает storage для создаваемого представления.

Матрица решений

Контролируемое наблюдениеПодтверждаемый вывод
попросите runtime определить encoded length до allocationИзменившийся результат локализует первый предлагаемый контроль вместо слепого повтора
запрошенное и выделенное число байтов различаются между успешным и неуспешным случаемРазница локализует исчерпание caller-owned output buffer до изменения несвязанных настроек
Независимый decoder принимает тот же артефактПроверьте сгенерированную schema, выбранные rules, ABI и необязательные модули OSS, прежде чем объявлять байты недействительными
Новый control object изменяет результатИсследуйте инициализацию, lifecycle, владение allocator, изменение конфигурации и concurrent access

Инструментирование

Записывайте полный 32-битный HRESULT и младший OSS return number вместе с направлением операции, символическим PDU, правилом кодирования, числом байтов и идентификатором generated table. Там, где запрошенное и выделенное число байтов может раскрывать чувствительные данные, хеш с ограниченным структурным фрагментом безопаснее полного payload. Используйте было ли отключено automatic allocation вместе с путями и версиями модулей OSS, записанными один раз на процесс, чтобы сопоставлять различия упаковки без засорения обычной диагностики.

Критерии завершения

Определяйте размер из контракта codec, а не из host-language structure, затем докажите, что тот же PDU успешно обрабатывается без truncation. Тест восстановления для попросите runtime определить encoded length до allocation должен повторять ту же операцию при той же schema и encoding rule, сохранять один намеренно недействительный control и проверять владение/очистку после обоих исходов. Успех после непроанализированного повтора не доказывает, что запрошенное и выделенное число байтов теперь соответствует контракту codec.

Технические ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.