diff --git a/skeletons/OCTET_STRING_oer.c b/skeletons/OCTET_STRING_oer.c
index 1b1e234..9f878d1 100644
--- a/skeletons/OCTET_STRING_oer.c
+++ b/skeletons/OCTET_STRING_oer.c
@@ -9,11 +9,6 @@
 #include <OCTET_STRING.h>
 #include <errno.h>
 
-static asn_oer_constraints_t asn_DEF_OCTET_STRING_oer_constraints = {
-        { 0, 0, 0 },
-        { AOC_HAS_LOWER_BOUND, 0, 0 }
-};
-
 asn_dec_rval_t
 OCTET_STRING_decode_oer(asn_codec_ctx_t *opt_codec_ctx,
                          asn_TYPE_descriptor_t *td,
@@ -26,8 +21,7 @@
     OCTET_STRING_t *st = (OCTET_STRING_t *)*sptr;
     asn_oer_constraints_t *cts =
         constraints ? constraints : td->oer_constraints;
-    asn_oer_constraint_t *csiz =
-        cts ? &cts->size : &asn_DEF_OCTET_STRING_oer_constraints.size;
+    ssize_t ct_size = cts ? cts->size : -1;
     asn_dec_rval_t rval = {RC_OK, 0};
     size_t expected_length = 0;
 
@@ -57,11 +51,8 @@
         if(!st) ASN__DECODE_FAILED;
     }
 
-    if((csiz->flags
-           & (AOC_HAS_LOWER_BOUND | AOC_HAS_UPPER_BOUND))
-                 == (AOC_HAS_LOWER_BOUND | AOC_HAS_UPPER_BOUND)
-       && csiz->lower_bound == csiz->upper_bound) {
-        expected_length = unit_bytes * csiz->lower_bound;
+    if(ct_size >= 0) {
+        expected_length = unit_bytes * ct_size;
     } else {
         /*
          * X.696 (08/2015) #27.2
@@ -120,18 +111,14 @@
     OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
     asn_oer_constraints_t *cts =
         constraints ? constraints : td->oer_constraints;
-    asn_oer_constraint_t *csiz =
-        cts ? &cts->size : &asn_DEF_OCTET_STRING_oer_constraints.size;
+    ssize_t ct_size = cts ? cts->size : -1;
     asn_enc_rval_t er = {0, 0, 0};
 
     if(!st) ASN__ENCODE_FAILED;
 
     ASN_DEBUG("Encoding %s %d as OCTET STRING", td ? td->name : "", st->size);
 
-    if((csiz->flags
-           & (AOC_HAS_LOWER_BOUND | AOC_HAS_UPPER_BOUND))
-                 == (AOC_HAS_LOWER_BOUND | AOC_HAS_UPPER_BOUND)
-       && csiz->lower_bound == csiz->upper_bound) {
+    if(ct_size >= 0) {
         /*
          * Check that available data matches the constraint
          */
@@ -154,11 +141,11 @@
             break;
         }
 
-        if(st->size != unit_bytes * csiz->lower_bound) {
+        if(st->size != unit_bytes * ct_size) {
             ASN_DEBUG(
                 "Trying to encode %s (%zu bytes) which doesn't fit SIZE "
                 "constraint (%d)",
-                td->name, st->size, csiz->lower_bound);
+                td->name, st->size, ct_size);
             ASN__ENCODE_FAILED;
         }
     } else {
