summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/x509/x509_addr.c39
1 files changed, 28 insertions, 11 deletions
diff --git a/src/lib/libcrypto/x509/x509_addr.c b/src/lib/libcrypto/x509/x509_addr.c
index d3cdebba25..e80ba35661 100644
--- a/src/lib/libcrypto/x509/x509_addr.c
+++ b/src/lib/libcrypto/x509/x509_addr.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_addr.c,v 1.54 2022/01/04 20:23:05 tb Exp $ */ 1/* $OpenBSD: x509_addr.c,v 1.55 2022/01/04 20:30:30 tb Exp $ */
2/* 2/*
3 * Contributed to the OpenSSL Project by the American Registry for 3 * Contributed to the OpenSSL Project by the American Registry for
4 * Internet Numbers ("ARIN"). 4 * Internet Numbers ("ARIN").
@@ -1060,6 +1060,23 @@ X509v3_addr_add_range(IPAddrBlocks *addr, const unsigned afi,
1060 return 1; 1060 return 1;
1061} 1061}
1062 1062
1063static int
1064extract_min_max_bitstr(IPAddressOrRange *aor, ASN1_BIT_STRING **out_min,
1065 ASN1_BIT_STRING **out_max)
1066{
1067 switch (aor->type) {
1068 case IPAddressOrRange_addressPrefix:
1069 *out_min = *out_max = aor->u.addressPrefix;
1070 return 1;
1071 case IPAddressOrRange_addressRange:
1072 *out_min = aor->u.addressRange->min;
1073 *out_max = aor->u.addressRange->max;
1074 return 1;
1075 default:
1076 return 0;
1077 }
1078}
1079
1063/* 1080/*
1064 * Extract min and max values from an IPAddressOrRange. 1081 * Extract min and max values from an IPAddressOrRange.
1065 */ 1082 */
@@ -1067,18 +1084,18 @@ static int
1067extract_min_max(IPAddressOrRange *aor, unsigned char *min, unsigned char *max, 1084extract_min_max(IPAddressOrRange *aor, unsigned char *min, unsigned char *max,
1068 int length) 1085 int length)
1069{ 1086{
1087 ASN1_BIT_STRING *min_bitstr, *max_bitstr;
1088
1070 if (aor == NULL || min == NULL || max == NULL) 1089 if (aor == NULL || min == NULL || max == NULL)
1071 return 0; 1090 return 0;
1072 switch (aor->type) { 1091
1073 case IPAddressOrRange_addressPrefix: 1092 if (!extract_min_max_bitstr(aor, &min_bitstr, &max_bitstr))
1074 return (addr_expand(min, aor->u.addressPrefix, length, 0x00) && 1093 return 0;
1075 addr_expand(max, aor->u.addressPrefix, length, 0xff)); 1094
1076 case IPAddressOrRange_addressRange: 1095 if (!addr_expand(min, min_bitstr, length, 0))
1077 return (addr_expand(min, aor->u.addressRange->min, length, 1096 return 0;
1078 0x00) && 1097
1079 addr_expand(max, aor->u.addressRange->max, length, 0xff)); 1098 return addr_expand(max, max_bitstr, length, 1);
1080 }
1081 return 0;
1082} 1099}
1083 1100
1084/* 1101/*