Merge 9812997bf8e4186c61b65e6fc2ca9ca3e8c2f146 into 3bb373867917b674265067cbd38b9d252c43d014

This commit is contained in:
Demi Marie Obenour 2026-07-20 21:08:56 +01:00 committed by GitHub
commit e7d28e3801
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -517,8 +517,8 @@ int mbedtls_x509_get_name(unsigned char **p, const unsigned char *end,
mbedtls_x509_name *cur)
{
int ret = MBEDTLS_ERR_ERROR_CORRUPTION_DETECTED;
size_t set_len;
const unsigned char *end_set;
size_t set_len, last_len, this_len;
const unsigned char *end_set, *last_p, *next_p;
mbedtls_x509_name *head = cur;
/* don't use recursion, we'd risk stack overflow if not optimized */
@ -534,11 +534,29 @@ int mbedtls_x509_get_name(unsigned char **p, const unsigned char *end,
end_set = *p + set_len;
last_p = NULL;
while (1) {
next_p = *p;
if ((ret = x509_get_attr_type_value(p, end_set, cur)) != 0) {
goto error;
}
this_len = (size_t) (*p - next_p);
if (last_p != NULL) {
size_t len_for_compare = this_len <= last_len ? this_len : last_len;
int delta = memcmp(last_p, next_p, len_for_compare);
if (delta > 0 || (delta == 0 && this_len <= last_len)) {
/* unsorted ASN.1 SET OF */
ret = MBEDTLS_ERR_X509_INVALID_NAME;
goto error;
}
}
last_p = next_p;
last_len = this_len;
if (*p == end_set) {
break;
}