summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto
diff options
context:
space:
mode:
authortb <>2026-05-16 06:27:05 +0000
committertb <>2026-05-16 06:27:05 +0000
commitdc2bc2fdb63a9fb33bbf79f46442082c460bfbb1 (patch)
treefcb4802c9b8a825b7323882a58795673c4dc1f0e /src/lib/libcrypto
parente740a3d7e0e3f1c423427518b031110af001410f (diff)
downloadopenbsd-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/libcrypto')
-rw-r--r--src/lib/libcrypto/x509/x509_prn.c6
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 }