X-Git-Url: http://git.silcnet.org/gitweb/?p=silc.git;a=blobdiff_plain;f=lib%2Fsilcasn1%2Fsilcasn1_encode.c;h=d8706b73a9dbd31643d3a0c99913a63cea5f0ac9;hp=123539f6fcd93d42b690832db1a0fbd14e430efb;hb=410642a14d4185abd75715cee3f5177cd55b1ceb;hpb=4a2208546ba22e3da99dc1a2adcf2102246d6c6f diff --git a/lib/silcasn1/silcasn1_encode.c b/lib/silcasn1/silcasn1_encode.c index 123539f6..d8706b73 100644 --- a/lib/silcasn1/silcasn1_encode.c +++ b/lib/silcasn1/silcasn1_encode.c @@ -199,6 +199,8 @@ silc_asn1_encoder(SilcAsn1 asn1, SilcStack stack1, SilcStack stack2, len = silc_buffer_len(node); dest = silc_buffer_srealloc_size(stack1, dest, silc_buffer_truelen(dest) + len); + if (!dest) + goto fail; silc_buffer_put(dest, node->data, len); } break; @@ -266,11 +268,15 @@ silc_asn1_encoder(SilcAsn1 asn1, SilcStack stack1, SilcStack stack2, bytes in 1s complement */ } else { /* Positive */ - len = (silc_mp_sizeinbase(mpint, 2) + 7) / 8; - len += len & 7 ? 1: 0; + len = silc_mp_sizeinbase(mpint, 2); + if (!(len & 7)) + len = ((len + 7) / 8) + 1; + else + len = (len + 7) / 8; silc_stack_push(stack2, &frame); silc_buffer_srealloc_size(stack2, &buf, silc_buffer_truelen(&buf) + len); + buf.data[0] = 0x00; silc_mp_mp2bin_noalloc(mpint, buf.data, silc_buffer_len(&buf)); }