Rewrite X509V3_get_d2i()
authortb <tb@openbsd.org>
Mon, 17 Jun 2024 05:31:26 +0000 (05:31 +0000)
committertb <tb@openbsd.org>
Mon, 17 Jun 2024 05:31:26 +0000 (05:31 +0000)
commit0e6355d3a9b9daaba03a48c83fb71f46bd15730c
tree6793c179ca4ba6c97b5931ed05e9d0e874de0052
parenta1ec0f809e04c7af36697a189687e31c0f55315e
Rewrite X509V3_get_d2i()

This API is wrapped by nine *_get{,1}_ext_d2i() functions and they all
have the same defect: if an idx variable is passed in, multiple extensions
are handled incorrectly.

Clean up the mess that was the current implementation by replacing the
reimplementation of X509v3_get_ext_by_NID() with extra twists by actual
calls to the real thing. This way the madness is implemented explicitly
and can be explained in comments. The code still gets shorter.

In brief: always call this API with a known nid, pass crit, and a NULL idx.
If NULL is returned, crit != -1 is an error (malformed cert or allocation
failure).

ok jsing
lib/libcrypto/x509/x509_lib.c