diff options
Diffstat (limited to 'src')
| -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; |
