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);
 }