BMPString and UniversalString fuzz testing
diff --git a/skeletons/OCTET_STRING.c b/skeletons/OCTET_STRING.c
index 942fc6b..e618609 100644
--- a/skeletons/OCTET_STRING.c
+++ b/skeletons/OCTET_STRING.c
@@ -1313,28 +1313,32 @@
 		return per_put_many_bits(po, buf, unit_bits * units);
 	}
 
-	for(ub -= lb; buf < end; buf += bpc) {
-		int ch;
-		uint32_t value;
-		switch(bpc) {
-		case 1: value = *(const uint8_t *)buf; break;
-		case 2: value = (buf[0] << 8) | buf[1]; break;
-		case 4: value = (buf[0] << 24) | (buf[1] << 16)
-				| (buf[2] << 8) | buf[3]; break;
-		default: return -1;
-		}
-		ch = value - lb;
-		if(ch < 0 || ch > ub) {
-			ASN_DEBUG("Character %d (0x%02x)"
-			" is out of range (%ld..%ld)",
-				*buf, *buf, lb, ub + lb);
-			return -1;
-		}
-		if(per_put_few_bits(po, ch, unit_bits))
-			return -1;
-	}
+    for(ub -= lb; buf < end; buf += bpc) {
+        int ch;
+        uint32_t value;
+        switch(bpc) {
+        case 1:
+            value = *(const uint8_t *)buf;
+            break;
+        case 2:
+            value = (buf[0] << 8) | buf[1];
+            break;
+        case 4:
+            value = (buf[0] << 24) | (buf[1] << 16) | (buf[2] << 8) | buf[3];
+            break;
+        default:
+            return -1;
+        }
+        ch = value - lb;
+        if(ch < 0 || ch > ub) {
+            ASN_DEBUG("Character %d (0x%02x) is out of range (%ld..%ld)", *buf,
+                      value, lb, ub + lb);
+            return -1;
+        }
+        if(per_put_few_bits(po, ch, unit_bits)) return -1;
+    }
 
-	return 0;
+    return 0;
 }
 
 static asn_per_constraints_t asn_DEF_OCTET_STRING_constraints = {
@@ -1998,13 +2002,19 @@
         break;
     case 2:
         for(b = buf; b < bend; b += unit_bytes) {
-            *(uint16_t *)b = OCTET_STRING__random_char(clb, cub);
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 8;
+            b[1] = code;
         }
         *(uint16_t *)b = 0;
         break;
     case 4:
         for(b = buf; b < bend; b += unit_bytes) {
-            *(uint32_t *)b = OCTET_STRING__random_char(clb, cub);
+            uint32_t code = OCTET_STRING__random_char(clb, cub);
+            b[0] = code >> 24;
+            b[1] = code >> 16;
+            b[2] = code >> 8;
+            b[3] = code;
         }
         *(uint32_t *)b = 0;
         break;