summaryrefslogtreecommitdiff
path: root/docs/examples/parseurl.c
diff options
context:
space:
mode:
authorViktor Szakats <commit@vsz.me>2025-08-08 13:07:34 +0200
committerViktor Szakats <commit@vsz.me>2025-08-08 20:08:31 +0200
commit8ec241bc990bc88c4f4f7275d81f9fb75b562a7a (patch)
tree81593f0c974d5e69b36501ac55e63e8b677f8e3d /docs/examples/parseurl.c
parentb823966d66c9aec9000d7493cfaf5eb9224567cc (diff)
openssl: clear errors after a failed `d2i_X509()`
Without it, subsequent OpenSSL API calls may fail with an error caught within the OpenSSL `d2i_X509()` (decode) call. It was seen to happen when importing from the Windows certificate store (e.g. with `--ca-native`), and any one of the certificates failed while decoding, then skipped. Behind the scene (and undocumented), the failed decode call is adding an error to an internal OpenSSL error queue. This error is picked up later, at the connect phase, by another OpenSSL API call, which happens to check the error queue, without clearing it first. It made the connect fail with the error collected earlier, while decoding the malformed and discarded certificate. Fix by explicitly clearing the error queue if the decode call fails. Ref: https://docs.openssl.org/3.5/man3/d2i_X509/ `-vvvv` output before this patch: ``` [0-0] == Info: successfully imported Windows ROOT store [0-0] == Info: successfully imported Windows CA store [0-0] == Info: [SSL] SSL_connect() -> err=-1, detail=1 [0-0] == Info: TLS connect error: error:068000DD:asn1 encoding routines::illegal padding [0-0] == Info: [SSL] cf_connect() -> 35, done=0 ``` Mainline OpenSSL (as of 3.5.2) and quictls (as of 3.3.0) are affected. LibreSSL is not affected. (I did not test BoringSSL and AWS-LC) Assisted-by: Stefan Eissing Reported-by: MichaƂ Petryka Fixes #18190 Closes #18228
Diffstat (limited to 'docs/examples/parseurl.c')
0 files changed, 0 insertions, 0 deletions