fix UPER decoding of large [bit-]strings of size a multiple of 16K
diff --git a/skeletons/ANY.c b/skeletons/ANY.c
index 497e656..1c85e82 100644
--- a/skeletons/ANY.c
+++ b/skeletons/ANY.c
@@ -218,6 +218,7 @@
/* Get the PER length */
raw_len = uper_get_length(pd, -1, 0, &repeat);
if(raw_len < 0) RETURN(RC_WMORE);
+ if(raw_len == 0 && st->buf) break;
ASN_DEBUG("Got PER length len %zu, %s (%s)", raw_len,
repeat ? "repeat" : "once", td->name);
@@ -254,8 +255,9 @@
buf = st->buf;
size = st->size;
- while(size) {
- ssize_t may_save = uper_put_length(po, size);
+ do {
+ int need_eom = 0;
+ ssize_t may_save = uper_put_length(po, size, &need_eom);
if(may_save < 0) ASN__ENCODE_FAILED;
ret = per_put_many_bits(po, buf, may_save * 8);
@@ -264,7 +266,9 @@
buf += may_save;
size -= may_save;
assert(!(may_save & 0x07) || !size);
- }
+ if(need_eom && uper_put_length(po, 0, 0))
+ ASN__ENCODE_FAILED; /* End of Message length */
+ } while(size);
ASN__ENCODED_OK(er);
}