| Предыдущий | Следующий |
| 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 | Делает сравнение воспроизводимым без изменения исходного артефакта |
Контролируемое воспроизведение
- попросите runtime определить encoded length до allocation
- повторите с runtime allocation в качестве контроля
- разместите 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.
Технические ссылки
- Microsoft: определения HRESULT OSS ASN.1
- OSS Nokalva: return codes encoder/decoder
- OSS Nokalva: runtime-функции и инициализация control
- Соответствующая спецификация ASN.1 или деталь runtime
Нужно найти другой код? Найти другой код состояния или ошибки.
