diff options
author | Lev Walkin <vlm@lionet.info> | 2005-02-24 22:37:07 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2005-02-24 22:37:07 +0000 |
commit | 642962ae074d0af7e2ee8e7d1ffddcfde801a668 (patch) | |
tree | d541998fa5fe049da568da6bde74228bd30acdd9 | |
parent | 043af0db1d81633d7e63d11ad16c0dc9d4e9b87a (diff) |
XMLValueList handling
-rw-r--r-- | ChangeLog | 10 | ||||
-rw-r--r-- | skeletons/constr_SEQUENCE_OF.c | 7 | ||||
-rw-r--r-- | skeletons/constr_SET_OF.c | 27 | ||||
-rw-r--r-- | skeletons/xer_decoder.c | 2 |
4 files changed, 26 insertions, 20 deletions
@@ -1,7 +1,11 @@ 0.9.10: 2005-Feb-24 - * Fixes #1150856 (vvvy@users.sourceforge.net). + * Fixed #1150856. + Reported by <vvvy@users.sourceforge.net>. + * Fixed XER XMLValueList encoding and decoding. + (Test case 70) (Severity: high, Secruity impact: low) + Reported by <siden@ul-gsm.ru>. 0.9.9: 2005-Feb-22 @@ -42,8 +46,8 @@ 0.9.7: 2004-Oct-11 - * Finished CANONICAL-XER implementation by adding SET and SET OF - canonical ordering support. + * Finished CXER implementation by adding SET and SET OF canonical + ordering support. * Fixed unber(1) limits controlling logic. * Removed C99'izm from the x509dump, now understood by older compilers. * Enhanced UTF8String constraint validation, now it checks diff --git a/skeletons/constr_SEQUENCE_OF.c b/skeletons/constr_SEQUENCE_OF.c index f126d78a..027f5ecc 100644 --- a/skeletons/constr_SEQUENCE_OF.c +++ b/skeletons/constr_SEQUENCE_OF.c @@ -117,6 +117,13 @@ SEQUENCE_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, tmper = element->type->xer_encoder(element->type, memb_ptr, ilevel + 1, flags, cb, app_key); if(tmper.encoded == -1) return tmper; + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = (*element->name) + ? element->name : element->type->xml_tag; + size_t len = strlen(name); + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1); + _ASN_CALLBACK3("<", 1, name, len, "/>", 2); + } if(mname) { _ASN_CALLBACK3("</", 2, mname, mlen, ">", 1); diff --git a/skeletons/constr_SET_OF.c b/skeletons/constr_SET_OF.c index 37268dc0..931aab27 100644 --- a/skeletons/constr_SET_OF.c +++ b/skeletons/constr_SET_OF.c @@ -469,9 +469,8 @@ SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, */ asn_SET_OF_specifics_t *specs = (asn_SET_OF_specifics_t *)td->specifics; asn_TYPE_member_t *element = td->elements; - const char *elm_tag = specs->as_XMLValueList - ? 0 : ((*element->name) - ? element->name : element->type->xml_tag); + const char *elm_tag = ((*element->name) + ? element->name : element->type->xml_tag); const char *xml_tag = opt_mname ? opt_mname : td->xml_tag; /* @@ -578,23 +577,12 @@ SET_OF_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, case XCT_UNKNOWN_BO: ASN_DEBUG("XER/SET OF: tcv=%d, ph=%d", tcv, ctx->phase); - if(ctx->phase != 1) - break; /* Really unexpected */ - - /* - * Search which member corresponds to this tag. - */ - tcv = xer_check_tag(buf_ptr, ch_size, elm_tag); - switch(tcv) { - case XCT_BOTH: - case XCT_OPENING: + if(ctx->phase == 1) { /* - * Process this member. + * Process a single possible member. */ ctx->phase = 2; continue; - default: - break; /* Phase out */ } /* Fall through */ default: @@ -703,6 +691,13 @@ SET_OF_encode_xer(asn_TYPE_descriptor_t *td, void *sptr, sptr = tmper.structure_ptr; goto cb_failed; } + if(tmper.encoded == 0 && specs->as_XMLValueList) { + const char *name = (*element->name) + ? element->name : element->type->xml_tag; + size_t len = strlen(name); + if(!xcan) _i_ASN_TEXT_INDENT(1, ilevel + 1); + _ASN_CALLBACK3("<", 1, name, len, "/>", 2); + } if(mname) { _ASN_CALLBACK3("</", 2, mname, mlen, ">", 1); diff --git a/skeletons/xer_decoder.c b/skeletons/xer_decoder.c index 91276790..82c084e2 100644 --- a/skeletons/xer_decoder.c +++ b/skeletons/xer_decoder.c @@ -287,7 +287,7 @@ xer_decode_general(asn_codec_ctx_t *opt_codec_ctx, break; /* Unexpected tag */ } - ASN_DEBUG("Unexpected XML tag"); + ASN_DEBUG("Unexpected XML tag (expected \"%s\")", xml_tag); break; /* Dark and mysterious things have just happened */ } |