diff options
| author | tb <> | 2026-05-16 06:27:05 +0000 |
|---|---|---|
| committer | tb <> | 2026-05-16 06:27:05 +0000 |
| commit | dc2bc2fdb63a9fb33bbf79f46442082c460bfbb1 (patch) | |
| tree | fcb4802c9b8a825b7323882a58795673c4dc1f0e /src/lib | |
| parent | e740a3d7e0e3f1c423427518b031110af001410f (diff) | |
| download | openbsd-dc2bc2fdb63a9fb33bbf79f46442082c460bfbb1.tar.gz openbsd-dc2bc2fdb63a9fb33bbf79f46442082c460bfbb1.tar.bz2 openbsd-dc2bc2fdb63a9fb33bbf79f46442082c460bfbb1.zip | |
Ensure X509V3_EXT_print() only returns 0 and 1
In a rare mistake by schwarze, X509V3_EXT_print() is documented to return
0 and 1. This is also what most internal callers expect.
However, if either X509V3_EXT_DUMP_UNKNOWN or X509V3_EXT_PARSE_UNKNOWN is
set, the extension has an unknown NID or on failure to deserialize the
extension value, the return values of BIO_dump_indent() (which is number
of bytes written or -1 on error) and ASN1_parse_dump() (which is 0, 1, or
2 on EOC) are propagated.
Follow what OpenSSL did and translate to Boolean returns. Error indicators
are rather useless here since most errors are ignored anyway. Most callers
do if (!X509V3_EXT_print(...)) but they also pass a zero flag.
Reported by N. Dossche
ok kenjiro
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/libcrypto/x509/x509_prn.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/lib/libcrypto/x509/x509_prn.c b/src/lib/libcrypto/x509/x509_prn.c index 23c649a7b9..327bc33772 100644 --- a/src/lib/libcrypto/x509/x509_prn.c +++ b/src/lib/libcrypto/x509/x509_prn.c | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | /* $OpenBSD: x509_prn.c,v 1.7 2025/06/02 12:18:22 jsg Exp $ */ | 1 | /* $OpenBSD: x509_prn.c,v 1.8 2026/05/16 06:27:05 tb Exp $ */ |
| 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
| 3 | * project 1999. | 3 | * project 1999. |
| 4 | */ | 4 | */ |
| @@ -207,10 +207,10 @@ unknown_ext_print(BIO *out, X509_EXTENSION *ext, unsigned long flag, | |||
| 207 | return 1; | 207 | return 1; |
| 208 | case X509V3_EXT_PARSE_UNKNOWN: | 208 | case X509V3_EXT_PARSE_UNKNOWN: |
| 209 | return ASN1_parse_dump(out, | 209 | return ASN1_parse_dump(out, |
| 210 | ext->value->data, ext->value->length, indent, -1); | 210 | ext->value->data, ext->value->length, indent, -1) > 0; |
| 211 | case X509V3_EXT_DUMP_UNKNOWN: | 211 | case X509V3_EXT_DUMP_UNKNOWN: |
| 212 | return BIO_dump_indent(out, (char *)ext->value->data, | 212 | return BIO_dump_indent(out, (char *)ext->value->data, |
| 213 | ext->value->length, indent); | 213 | ext->value->length, indent) > 0; |
| 214 | default: | 214 | default: |
| 215 | return 1; | 215 | return 1; |
| 216 | } | 216 | } |
