summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/x509/x509_constraints.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/src/lib/libcrypto/x509/x509_constraints.c b/src/lib/libcrypto/x509/x509_constraints.c
index 5fbcef304f..55a7eae28f 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.15 2021/03/12 15:57:30 tb Exp $ */ 1/* $OpenBSD: x509_constraints.c,v 1.15.2.1 2021/09/26 14:07:40 deraadt Exp $ */
2/* 2/*
3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org> 3 * Copyright (c) 2020 Bob Beck <beck@openbsd.org>
4 * 4 *
@@ -334,16 +334,16 @@ x509_constraints_parse_mailbox(uint8_t *candidate, size_t len,
334 if (c == '.') 334 if (c == '.')
335 goto bad; 335 goto bad;
336 } 336 }
337 if (wi > DOMAIN_PART_MAX_LEN)
338 goto bad;
339 if (accept) { 337 if (accept) {
338 if (wi >= DOMAIN_PART_MAX_LEN)
339 goto bad;
340 working[wi++] = c; 340 working[wi++] = c;
341 accept = 0; 341 accept = 0;
342 continue; 342 continue;
343 } 343 }
344 if (candidate_local != NULL) { 344 if (candidate_local != NULL) {
345 /* We are looking for the domain part */ 345 /* We are looking for the domain part */
346 if (wi > DOMAIN_PART_MAX_LEN) 346 if (wi >= DOMAIN_PART_MAX_LEN)
347 goto bad; 347 goto bad;
348 working[wi++] = c; 348 working[wi++] = c;
349 if (i == len - 1) { 349 if (i == len - 1) {
@@ -358,7 +358,7 @@ x509_constraints_parse_mailbox(uint8_t *candidate, size_t len,
358 continue; 358 continue;
359 } 359 }
360 /* We are looking for the local part */ 360 /* We are looking for the local part */
361 if (wi > LOCAL_PART_MAX_LEN) 361 if (wi >= LOCAL_PART_MAX_LEN)
362 break; 362 break;
363 363
364 if (quoted) { 364 if (quoted) {
@@ -378,6 +378,8 @@ x509_constraints_parse_mailbox(uint8_t *candidate, size_t len,
378 */ 378 */
379 if (c == 9) 379 if (c == 9)
380 goto bad; 380 goto bad;
381 if (wi >= LOCAL_PART_MAX_LEN)
382 goto bad;
381 working[wi++] = c; 383 working[wi++] = c;
382 continue; /* all's good inside our quoted string */ 384 continue; /* all's good inside our quoted string */
383 } 385 }
@@ -407,6 +409,8 @@ x509_constraints_parse_mailbox(uint8_t *candidate, size_t len,
407 } 409 }
408 if (!local_part_ok(c)) 410 if (!local_part_ok(c))
409 goto bad; 411 goto bad;
412 if (wi >= LOCAL_PART_MAX_LEN)
413 goto bad;
410 working[wi++] = c; 414 working[wi++] = c;
411 } 415 }
412 if (candidate_local == NULL || candidate_domain == NULL) 416 if (candidate_local == NULL || candidate_domain == NULL)