X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fasn1%2Fa_object.c;h=79f0ecd2a868405f79d6561fa412e42362023d0c;hb=39ff4d7adde80b87c994649559921b9189b9612f;hp=463469d188bc5536809873c021a00105ee1a2d95;hpb=e83f154f6c19f557251676d9008c75f89f9f5d4a;p=oweals%2Fopenssl.git diff --git a/crypto/asn1/a_object.c b/crypto/asn1/a_object.c index 463469d188..79f0ecd2a8 100644 --- a/crypto/asn1/a_object.c +++ b/crypto/asn1/a_object.c @@ -26,7 +26,7 @@ int i2d_ASN1_OBJECT(const ASN1_OBJECT *a, unsigned char **pp) return (0); objsize = ASN1_object_size(0, a->length, V_ASN1_OBJECT); - if (pp == NULL) + if (pp == NULL || objsize == -1) return objsize; p = *pp; @@ -127,8 +127,12 @@ int a2d_ASN1_OBJECT(unsigned char *out, int olen, const char *buf, int num) if (tmp == NULL) goto err; } - while (blsize--) - tmp[i++] = (unsigned char)BN_div_word(bl, 0x80L); + while (blsize--) { + BN_ULONG t = BN_div_word(bl, 0x80L); + if (t == (BN_ULONG)-1) + goto err; + tmp[i++] = (unsigned char)t; + } } else { for (;;) {