diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c index a20bee111eff5eac9694106277efa5c20c195513..164bf3f6da162c55cfdf9eb4a7c5139d69df48af 100644 --- a/skeletons/INTEGER.c +++ b/skeletons/INTEGER.c @@ -311,6 +311,7 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun ST_SKIPSPACE, ST_WAITDIGITS, ST_DIGITS, + ST_EXTRASTUFF, } state = ST_SKIPSPACE; /* @@ -373,18 +374,24 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun el->enum_name, el->nat_value); state = ST_DIGITS; value = el->nat_value; - break; + lp = lstop - 1; + continue; } ASN_DEBUG("Unknown identifier for INTEGER"); } return XPBD_BROKEN_ENCODING; } + + /* Found extra non-numeric stuff */ + state = ST_EXTRASTUFF; break; } if(state != ST_DIGITS) { - if(xer_is_whitespace(chunk_buf, chunk_size)) { - return XPBD_NOT_BODY_IGNORE; + if(xer_is_whitespace(lp, lstop - lp)) { + if(state != ST_EXTRASTUFF) + return XPBD_NOT_BODY_IGNORE; + /* Fall through */ } else { ASN_DEBUG("No useful digits in output"); return XPBD_BROKEN_ENCODING; /* No digits */