fix consrtaint propagation for random_fill
diff --git a/skeletons/BIT_STRING.c b/skeletons/BIT_STRING.c
index 522d13a..ed2a448 100644
--- a/skeletons/BIT_STRING.c
+++ b/skeletons/BIT_STRING.c
@@ -571,7 +571,8 @@
     /* Figure out how far we should go */
     rnd_bits = lengths[asn_random_between(
         0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
-    if(!constraints) constraints = &td->encoding_constraints;
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
     if(constraints->per_constraints) {
         const asn_per_constraint_t *pc = &constraints->per_constraints->size;
         if(pc->flags & APC_CONSTRAINED) {
diff --git a/skeletons/BOOLEAN.c b/skeletons/BOOLEAN.c
index 3da5a6b..fd8b80c 100644
--- a/skeletons/BOOLEAN.c
+++ b/skeletons/BOOLEAN.c
@@ -406,7 +406,8 @@
         }
     }
 
-    if(!constraints) constraints = &td->encoding_constraints;
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
     if(constraints->per_constraints) {
         const asn_per_constraint_t *pc = &constraints->per_constraints->value;
         if(pc->flags & APC_CONSTRAINED) {
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index 5007414..c16e899 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -1886,10 +1886,10 @@
     rnd_len = lengths[asn_random_between(
         0, sizeof(lengths) / sizeof(lengths[0]) - 1)];
 
-    if(!constraints) constraints = &td->encoding_constraints;
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
     if(constraints->per_constraints) {
-        const asn_per_constraint_t *pc =
-            &td->encoding_constraints.per_constraints->size;
+        const asn_per_constraint_t *pc = &constraints->per_constraints->size;
         if(pc->flags & APC_CONSTRAINED) {
             long suggested_upper_bound = pc->upper_bound < (ssize_t)max_length
                                              ? pc->upper_bound
@@ -1977,10 +1977,10 @@
         break;
     }
 
-    if(!constraints) constraints = &td->encoding_constraints;
+    if(!constraints || !constraints->per_constraints)
+        constraints = &td->encoding_constraints;
     if(constraints->per_constraints) {
-        const asn_per_constraint_t *pc =
-            &td->encoding_constraints.per_constraints->value;
+        const asn_per_constraint_t *pc = &constraints->per_constraints->value;
         if(pc->flags & APC_SEMI_CONSTRAINED) {
             clb = pc->lower_bound;
         } else if(pc->flags & APC_CONSTRAINED) {
diff --git a/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt b/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt
index cee7840..c37cfc2 100644
--- a/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt
+++ b/tests/tests-randomized/bundles/16-SEQUENCE-bundle.txt
@@ -7,6 +7,12 @@
 SEQUENCE { ..., null BOOLEAN }
 SEQUENCE { ..., null BOOLEAN DEFAULT FALSE }
 SEQUENCE { ..., null BOOLEAN DEFAULT TRUE }
+SEQUENCE { str IA5String }
+SEQUENCE { str IA5String OPTIONAL }
+SEQUENCE { str IA5String (SIZE(0)) }
+SEQUENCE { str IA5String (SIZE(0)) OPTIONAL }
+SEQUENCE { str IA5String (SIZE(1)) }
+SEQUENCE { str IA5String (SIZE(1)) OPTIONAL }
 
 SEQUENCE { null NULL }
 SEQUENCE { null NULL, ... }