simple version of open type decoder completed
diff --git a/skeletons/per_opentype.c b/skeletons/per_opentype.c
index 1c3a49a..2e5a7e1 100644
--- a/skeletons/per_opentype.c
+++ b/skeletons/per_opentype.c
@@ -18,6 +18,8 @@
 static int per_skip_bits(asn_per_data_t *pd, int skip_nbits);
 static asn_dec_rval_t uper_sot_suck(asn_codec_ctx_t *, asn_TYPE_descriptor_t *td, asn_per_constraints_t *constraints, void **sptr, asn_per_data_t *pd);
 
+int asn_debug_indent;
+
 /*
  * Encode an "open type field".
  * #10.1, #10.2
@@ -61,10 +63,11 @@
 	size_t bufLen = 0;
 	size_t bufSize = 0;
 	asn_per_data_t spd;
+	size_t padding;
 
 	_ASN_STACK_OVERFLOW_CHECK(ctx);
 
-	ASN_DEBUG("Getting open type %s from %s", td->name,
+	ASN_DEBUG("Getting open type %s from %s...", td->name,
 		per_data_string(pd));
 
 	do {
@@ -90,14 +93,30 @@
 		bufLen += chunk_bytes;
 	} while(repeat);
 
+	ASN_DEBUG("Getting open type %s encoded in %d bytes", td->name,
+		bufLen);
+
 	memset(&spd, 0, sizeof(spd));
 	spd.buffer = buf;
 	spd.nbits = bufLen << 3;
 
+	asn_debug_indent += 4;
 	rv = td->uper_decoder(ctx, td, constraints, sptr, &spd);
+	asn_debug_indent -= 4;
 
 	FREEMEM(buf);
 
+	/* Check padding validity */
+	padding = spd.nbits - spd.nboff;
+	if(padding >= 8) {
+		ASN_DEBUG("Too large padding %d in open type", padding);
+		_ASN_DECODE_FAILED;
+	} else if(per_get_few_bits(&spd, padding)) {
+		/* Can't be "no more data", then it's non-zero padding */
+		ASN_DEBUG("Non-zero padding");
+		_ASN_DECODE_FAILED;
+	}
+
 	return rv;
 }
 
@@ -121,9 +140,9 @@
 	pd->nbits = pd->nboff;	/* 0 good bits at this point, will refill */
 	pd->moved = 0;	/* This now counts the open type size in bits */
 
-	/*asn_debug_indent += 4;*/
+	asn_debug_indent += 4;
 	rv = td->uper_decoder(ctx, td, constraints, sptr, pd);
-	/*asn_debug_indent -= 4;*/
+	asn_debug_indent -= 4;
 
 #define	UPDRESTOREPD	do {						\
 	/* buffer and nboff are valid, preserve them. */		\