Я пытаюсь выяснить, какие функции OpenSSL могут возвращать указатели NULL, а какие нет. Иногда в документации четко говорится, что функция может возвращать NULL, например,
X509_NAME_get_entry
X509_NAME_get_entry () возвращает указатель X509_NAME на запрошенная запись или NULL, если индекс недействителен.
Иногда они этого не делают, например
X509_get_subject_name
В нем только говорится
X509_get_subject_name () возвращает имя субъекта сертификата x. Возвращаемое значение является внутренним указателем, который НЕ ДОЛЖЕН быть освобожден.
Неясно (для меня), означает ли это, что указатель всегда действителен или он также может быть НЕДЕЙСТВИТЕЛЕН.
Другой пример:
x509_name_entry_get_data
объясняет это для версии 1.1.1
X509_NAME_ENTRY_get_object () возвращает допустимая структура ASN1_OBJECT, если она установлена, или NULL, если произошла ошибка.
, но не для 1.1.0
Взгляд на исходный код не очень помогают, например, X509_get_subject_name просто возвращает члена:
X509_NAME *X509_get_subject_name(const X509 *a)
{
return a->cert_info.subject;
}
Если этому члену когда-либо назначен нулевой указатель или нет ...
В последнем примере кажется необходимым добавить проверки на все указатели, поступающие из функций, где нет явной документации о том, что указатель не может быть NULL. Я не хочу добавлять бессмысленные проверки указателей в код, но я не хочу использовать библиотеку, связанную с безопасностью, для того, чтобы отсутствующие проверки указателей могли каким-либо образом использоваться.
Кто-нибудь знает, как интерпретировать Документация OpenSSL правильно на этот счет? Или это просто ужасно противоречиво, и никто не может сказать по-настоящему?