test OER encoding over the INTEGER value range
diff --git a/skeletons/INTEGER_oer.c b/skeletons/INTEGER_oer.c
index 73c7e7f..e730d68 100644
--- a/skeletons/INTEGER_oer.c
+++ b/skeletons/INTEGER_oer.c
@@ -145,7 +145,7 @@
INTEGER_encode_oer(asn_TYPE_descriptor_t *td,
asn_oer_constraints_t *constraints, void *sptr,
asn_app_consume_bytes_f *cb, void *app_key) {
- const INTEGER_t *st = *(const INTEGER_t **)sptr;
+ const INTEGER_t *st = sptr;
asn_enc_rval_t er;
asn_oer_constraint_t *ct;
const uint8_t *buf;
@@ -170,19 +170,25 @@
sign = (buf && buf < end) ? buf[0] & 0x80 : 0;
- if(encode_as_unsigned && sign) {
- /* The value given is a signed value. Can't proceed. */
- ASN__ENCODE_FAILED;
- }
-
/* Ignore 9 leading zeroes or ones */
- for(; buf + 1 < end; buf++) {
- if(buf[0] == 0x0 && ((buf[1] & 0x80) == 0 || encode_as_unsigned)) {
- continue;
- } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) {
- continue;
+ if(encode_as_unsigned) {
+ if(sign) {
+ /* The value given is a signed value. Can't proceed. */
+ ASN__ENCODE_FAILED;
}
- break;
+ /* Remove leading zeros. */
+ for(; buf + 1 < end; buf++) {
+ if(buf[0] != 0x0) break;
+ }
+ } else {
+ for(; buf + 1 < end; buf++) {
+ if(buf[0] == 0x0 && (buf[1] & 0x80) == 0) {
+ continue;
+ } else if(buf[0] == 0xff && (buf[1] & 0x80) != 0) {
+ continue;
+ }
+ break;
+ }
}
useful_bytes = end - buf;