summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/x509/x509_alt.c11
-rw-r--r--src/lib/libcrypto/x509/x509_constraints.c26
2 files changed, 25 insertions, 12 deletions
diff --git a/src/lib/libcrypto/x509/x509_alt.c b/src/lib/libcrypto/x509/x509_alt.c
index 845ab1364f..8656df82b3 100644
--- a/src/lib/libcrypto/x509/x509_alt.c
+++ b/src/lib/libcrypto/x509/x509_alt.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_alt.c,v 1.11 2022/03/14 21:15:49 tb Exp $ */ 1/* $OpenBSD: x509_alt.c,v 1.12 2022/03/26 16:34:21 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. 3 * project.
4 */ 4 */
@@ -673,21 +673,24 @@ v2i_GENERAL_NAME_ex(GENERAL_NAME *out, const X509V3_EXT_METHOD *method,
673 case GEN_DNS: 673 case GEN_DNS:
674 if (!x509_constraints_valid_sandns(bytes, len)) { 674 if (!x509_constraints_valid_sandns(bytes, len)) {
675 X509V3error(X509V3_R_BAD_OBJECT); 675 X509V3error(X509V3_R_BAD_OBJECT);
676 ERR_asprintf_error_data("name=%s value='%s'", name, bytes); 676 ERR_asprintf_error_data("name=%s value='%.*s'", name,
677 (int)len, bytes);
677 goto err; 678 goto err;
678 } 679 }
679 break; 680 break;
680 case GEN_URI: 681 case GEN_URI:
681 if (!x509_constraints_uri_host(bytes, len, NULL)) { 682 if (!x509_constraints_uri_host(bytes, len, NULL)) {
682 X509V3error(X509V3_R_BAD_OBJECT); 683 X509V3error(X509V3_R_BAD_OBJECT);
683 ERR_asprintf_error_data("name=%s value='%s'", name, bytes); 684 ERR_asprintf_error_data("name=%s value='%.*s'", name,
685 (int)len, bytes);
684 goto err; 686 goto err;
685 } 687 }
686 break; 688 break;
687 case GEN_EMAIL: 689 case GEN_EMAIL:
688 if (!x509_constraints_parse_mailbox(bytes, len, NULL)) { 690 if (!x509_constraints_parse_mailbox(bytes, len, NULL)) {
689 X509V3error(X509V3_R_BAD_OBJECT); 691 X509V3error(X509V3_R_BAD_OBJECT);
690 ERR_asprintf_error_data("name=%s value='%s'", name, bytes); 692 ERR_asprintf_error_data("name=%s value='%.*s'", name,
693 (int)len, bytes);
691 goto err; 694 goto err;
692 } 695 }
693 break; 696 break;
diff --git a/src/lib/libcrypto/x509/x509_constraints.c b/src/lib/libcrypto/x509/x509_constraints.c
index 4f24277918..533bbbf4ca 100644
--- a/src/lib/libcrypto/x509/x509_constraints.c
+++ b/src/lib/libcrypto/x509/x509_constraints.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: x509_constraints.c,v 1.25 2022/03/14 21:29:46 tb Exp $ */ 1/* $OpenBSD: x509_constraints.c,v 1.26 2022/03/26 16:34:21 tb Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -657,35 +657,45 @@ x509_constraints_general_to_bytes(GENERAL_NAME *name, uint8_t **bytes,
657 657
658 if (name->type == GEN_DNS) { 658 if (name->type == GEN_DNS) {
659 ASN1_IA5STRING *aname = name->d.dNSName; 659 ASN1_IA5STRING *aname = name->d.dNSName;
660
660 *bytes = aname->data; 661 *bytes = aname->data;
661 *len = strlen(aname->data); 662 *len = aname->length;
663
662 return name->type; 664 return name->type;
663 } 665 }
664 if (name->type == GEN_EMAIL) { 666 if (name->type == GEN_EMAIL) {
665 ASN1_IA5STRING *aname = name->d.rfc822Name; 667 ASN1_IA5STRING *aname = name->d.rfc822Name;
668
666 *bytes = aname->data; 669 *bytes = aname->data;
667 *len = strlen(aname->data); 670 *len = aname->length;
671
668 return name->type; 672 return name->type;
669 } 673 }
670 if (name->type == GEN_URI) { 674 if (name->type == GEN_URI) {
671 ASN1_IA5STRING *aname = name->d.uniformResourceIdentifier; 675 ASN1_IA5STRING *aname = name->d.uniformResourceIdentifier;
676
672 *bytes = aname->data; 677 *bytes = aname->data;
673 *len = strlen(aname->data); 678 *len = aname->length;
679
674 return name->type; 680 return name->type;
675 } 681 }
676 if (name->type == GEN_DIRNAME) { 682 if (name->type == GEN_DIRNAME) {
677 X509_NAME *dname = name->d.directoryName; 683 X509_NAME *dname = name->d.directoryName;
684
678 if (!dname->modified || i2d_X509_NAME(dname, NULL) >= 0) { 685 if (!dname->modified || i2d_X509_NAME(dname, NULL) >= 0) {
679 *bytes = dname->canon_enc; 686 *bytes = dname->canon_enc;
680 *len = dname->canon_enclen; 687 *len = dname->canon_enclen;
688
681 return name->type; 689 return name->type;
682 } 690 }
683 } 691 }
684 if (name->type == GEN_IPADD) { 692 if (name->type == GEN_IPADD) {
685 *bytes = name->d.ip->data; 693 *bytes = name->d.ip->data;
686 *len = name->d.ip->length; 694 *len = name->d.ip->length;
695
687 return name->type; 696 return name->type;
688 } 697 }
698
689 return 0; 699 return 0;
690} 700}
691 701
@@ -723,7 +733,7 @@ x509_constraints_extract_names(struct x509_constraints_names *names,
723 *error = X509_V_ERR_UNSUPPORTED_NAME_SYNTAX; 733 *error = X509_V_ERR_UNSUPPORTED_NAME_SYNTAX;
724 goto err; 734 goto err;
725 } 735 }
726 if ((vname->name = strdup(bytes)) == NULL) { 736 if ((vname->name = strndup(bytes, len)) == NULL) {
727 *error = X509_V_ERR_OUT_OF_MEM; 737 *error = X509_V_ERR_OUT_OF_MEM;
728 goto err; 738 goto err;
729 } 739 }
@@ -931,7 +941,7 @@ x509_constraints_validate(GENERAL_NAME *constraint,
931 case GEN_DNS: 941 case GEN_DNS:
932 if (!x509_constraints_valid_domain_constraint(bytes, len)) 942 if (!x509_constraints_valid_domain_constraint(bytes, len))
933 goto err; 943 goto err;
934 if ((name->name = strdup(bytes)) == NULL) { 944 if ((name->name = strndup(bytes, len)) == NULL) {
935 error = X509_V_ERR_OUT_OF_MEM; 945 error = X509_V_ERR_OUT_OF_MEM;
936 goto err; 946 goto err;
937 } 947 }
@@ -953,7 +963,7 @@ x509_constraints_validate(GENERAL_NAME *constraint,
953 } 963 }
954 if (!x509_constraints_valid_domain_constraint(bytes, len)) 964 if (!x509_constraints_valid_domain_constraint(bytes, len))
955 goto err; 965 goto err;
956 if ((name->name = strdup(bytes)) == NULL) { 966 if ((name->name = strndup(bytes, len)) == NULL) {
957 error = X509_V_ERR_OUT_OF_MEM; 967 error = X509_V_ERR_OUT_OF_MEM;
958 goto err; 968 goto err;
959 } 969 }
@@ -973,7 +983,7 @@ x509_constraints_validate(GENERAL_NAME *constraint,
973 case GEN_URI: 983 case GEN_URI:
974 if (!x509_constraints_valid_domain_constraint(bytes, len)) 984 if (!x509_constraints_valid_domain_constraint(bytes, len))
975 goto err; 985 goto err;
976 if ((name->name = strdup(bytes)) == NULL) { 986 if ((name->name = strndup(bytes, len)) == NULL) {
977 error = X509_V_ERR_OUT_OF_MEM; 987 error = X509_V_ERR_OUT_OF_MEM;
978 goto err; 988 goto err;
979 } 989 }