fix UPER BIT STRING trailer encoding

This commit is contained in:
Lev Walkin 2017-10-20 23:12:09 -07:00
parent ba2c5727d0
commit 5de8274266
1 changed files with 9 additions and 5 deletions

View File

@ -487,17 +487,20 @@ BIT_STRING_encode_uper(const asn_TYPE_descriptor_t *td,
if(csiz->effective_bits >= 0 && !inext) {
int add_trailer = (ssize_t)size_in_bits < csiz->lower_bound;
ASN_DEBUG("Encoding %zu bytes (%ld), length in %d bits", st->size,
size_in_bits - csiz->lower_bound, csiz->effective_bits);
ASN_DEBUG(
"Encoding %zu bytes (%ld), length (in %d bits) trailer %d; actual "
"value %zd",
st->size, size_in_bits - csiz->lower_bound, csiz->effective_bits,
add_trailer,
add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound);
ret = per_put_few_bits(
po,
add_trailer ? csiz->lower_bound : (ssize_t)size_in_bits - csiz->lower_bound,
po, add_trailer ? 0 : (ssize_t)size_in_bits - csiz->lower_bound,
csiz->effective_bits);
if(ret) ASN__ENCODE_FAILED;
ret = per_put_many_bits(po, st->buf, size_in_bits);
if(ret) ASN__ENCODE_FAILED;
if(add_trailer) {
static uint8_t zeros[16];
static const uint8_t zeros[16];
size_t trailing_zero_bits = csiz->lower_bound - size_in_bits;
while(trailing_zero_bits > 0) {
if(trailing_zero_bits > 8 * sizeof(zeros)) {
@ -623,6 +626,7 @@ BIT_STRING_random_fill(const asn_TYPE_descriptor_t *td, void **sptr,
for(b = buf; b < bend; b++) {
*(uint8_t *)b = asn_random_between(0, 255);
}
*b = 0; /* Zero-terminate just in case. */
if(*sptr) {
st = *sptr;