diff options
-rw-r--r-- | src/lib/libcrypto/asn1/a_object.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/lib/libcrypto/asn1/a_object.c b/src/lib/libcrypto/asn1/a_object.c index aae1b8bbd7..ed9e9287c4 100644 --- a/src/lib/libcrypto/asn1/a_object.c +++ b/src/lib/libcrypto/asn1/a_object.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: a_object.c,v 1.53 2024/05/29 16:10:41 tb Exp $ */ | 1 | /* $OpenBSD: a_object.c,v 1.54 2024/05/29 16:14:38 tb Exp $ */ |
2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
3 | * All rights reserved. | 3 | * All rights reserved. |
4 | * | 4 | * |
@@ -615,7 +615,7 @@ c2i_ASN1_OBJECT(ASN1_OBJECT **out_aobj, const unsigned char **pp, long len) | |||
615 | int | 615 | int |
616 | i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) | 616 | i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) |
617 | { | 617 | { |
618 | unsigned char *p; | 618 | unsigned char *buf, *p; |
619 | int objsize; | 619 | int objsize; |
620 | 620 | ||
621 | if (a == NULL || a->data == NULL) | 621 | if (a == NULL || a->data == NULL) |
@@ -626,11 +626,20 @@ i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) | |||
626 | if (pp == NULL) | 626 | if (pp == NULL) |
627 | return objsize; | 627 | return objsize; |
628 | 628 | ||
629 | p = *pp; | 629 | if ((buf = *pp) == NULL) |
630 | buf = calloc(1, objsize); | ||
631 | if (buf == NULL) | ||
632 | return -1; | ||
633 | |||
634 | p = buf; | ||
630 | ASN1_put_object(&p, 0, a->length, V_ASN1_OBJECT, V_ASN1_UNIVERSAL); | 635 | ASN1_put_object(&p, 0, a->length, V_ASN1_OBJECT, V_ASN1_UNIVERSAL); |
631 | memcpy(p, a->data, a->length); | 636 | memcpy(p, a->data, a->length); |
632 | p += a->length; | 637 | p += a->length; |
633 | 638 | ||
639 | /* If buf was allocated, return it, otherwise return the advanced p. */ | ||
640 | if (*pp == NULL) | ||
641 | p = buf; | ||
642 | |||
634 | *pp = p; | 643 | *pp = p; |
635 | 644 | ||
636 | return objsize; | 645 | return objsize; |