check length size in default BMPString and UniversalString constraints
diff --git a/skeletons/UniversalString.c b/skeletons/UniversalString.c
index 1879ecf..45ba437 100644
--- a/skeletons/UniversalString.c
+++ b/skeletons/UniversalString.c
@@ -27,7 +27,7 @@
 	OCTET_STRING_free,
 	UniversalString_print,      /* Convert into UTF8 and print */
 	OCTET_STRING_compare,
-	asn_generic_no_constraint,
+	UniversalString_constraint,
 	OCTET_STRING_decode_ber,
 	OCTET_STRING_encode_der,
 	UniversalString_decode_xer,	/* Convert from UTF-8 */
@@ -52,7 +52,7 @@
 	"UniversalString",
 	"UniversalString",
 	&asn_OP_UniversalString,
-	asn_generic_no_constraint,
+	UniversalString_constraint,
 	asn_DEF_UniversalString_tags,
 	sizeof(asn_DEF_UniversalString_tags)
 	  / sizeof(asn_DEF_UniversalString_tags[0]) - 1,
@@ -65,6 +65,27 @@
 	&asn_SPC_UniversalString_specs
 };
 
+int
+UniversalString_constraint(asn_TYPE_descriptor_t *td, const void *sptr,
+                           asn_app_constraint_failed_f *ctfailcb,
+                           void *app_key) {
+    const UniversalString_t *st = (const UniversalString_t *)sptr;
+
+    if(st && st->buf) {
+        if(st->size & 3) {
+            ASN__CTFAIL(app_key, td, sptr,
+                        "%s: invalid size %zu not divisible by 4 (%s:%d)",
+                        td->name, st->size, __FILE__, __LINE__);
+            return -1;
+        }
+    } else {
+        ASN__CTFAIL(app_key, td, sptr, "%s: value not given (%s:%d)", td->name,
+                    __FILE__, __LINE__);
+        return -1;
+    }
+
+    return 0;
+}
 
 static ssize_t
 UniversalString__dump(const UniversalString_t *st,