Commit 02666199 authored by Lev Walkin's avatar Lev Walkin

better handling of not-yet-present extensions

parent b0f3db69
...@@ -764,46 +764,54 @@ SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, ...@@ -764,46 +764,54 @@ SEQUENCE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
case XCT_UNKNOWN_OP: case XCT_UNKNOWN_OP:
case XCT_UNKNOWN_BO: case XCT_UNKNOWN_BO:
ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d", ASN_DEBUG("XER/SEQUENCE: tcv=%d, ph=%d, edx=%d",
tcv, ctx->phase); tcv, ctx->phase, edx);
if(ctx->phase != 1 if(ctx->phase != 1) {
|| edx >= td->elements_count)
break; /* Really unexpected */ break; /* Really unexpected */
}
/* if(edx < td->elements_count) {
* Search which member corresponds to this tag. /*
*/ * Search which member corresponds to this tag.
edx_end = edx + elements[edx].optional + 1; */
if(edx_end > td->elements_count) edx_end = edx + elements[edx].optional + 1;
edx_end = td->elements_count; if(edx_end > td->elements_count)
for(n = edx; n < edx_end; n++) { edx_end = td->elements_count;
elm = &td->elements[n]; for(n = edx; n < edx_end; n++) {
tcv = xer_check_tag(buf_ptr,ch_size,elm->name); elm = &td->elements[n];
switch(tcv) { tcv = xer_check_tag(buf_ptr,
case XCT_BOTH: ch_size, elm->name);
case XCT_OPENING: switch(tcv) {
/* case XCT_BOTH:
* Process this member. case XCT_OPENING:
*/ /*
ctx->step = edx = n; * Process this member.
ctx->phase = 2; */
ctx->step = edx = n;
ctx->phase = 2;
break;
case XCT_UNKNOWN_OP:
case XCT_UNKNOWN_BO:
continue;
default:
n = edx_end;
break; /* Phase out */
}
break; break;
case XCT_UNKNOWN_OP:
case XCT_UNKNOWN_BO:
continue;
default:
n = edx_end;
break; /* Phase out */
} }
break; if(n != edx_end)
continue;
} else {
ASN_DEBUG("Out of defined members: %d/%d",
edx, td->elements_count);
} }
if(n != edx_end)
continue;
/* It is expected extension */ /* It is expected extension */
if(IN_EXTENSION_GROUP(specs, if(IN_EXTENSION_GROUP(specs,
edx + elements[edx].optional)) { edx + (edx < td->elements_count
ASN_DEBUG("Got anticipated extension at %d", edx); ? elements[edx].optional : 0))) {
ASN_DEBUG("Got anticipated extension at %d",
edx);
/* /*
* Check for (XCT_BOTH or XCT_UNKNOWN_BO) * Check for (XCT_BOTH or XCT_UNKNOWN_BO)
* By using a mask. Only record a pure * By using a mask. Only record a pure
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment