aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2005-02-24 22:37:07 +0000
committerLev Walkin <vlm@lionet.info>2005-02-24 22:37:07 +0000
commit642962ae074d0af7e2ee8e7d1ffddcfde801a668 (patch)
treed541998fa5fe049da568da6bde74228bd30acdd9
parent043af0db1d81633d7e63d11ad16c0dc9d4e9b87a (diff)
XMLValueList handling
-rw-r--r--ChangeLog10
-rw-r--r--skeletons/constr_SEQUENCE_OF.c7
-rw-r--r--skeletons/constr_SET_OF.c27
-rw-r--r--skeletons/xer_decoder.c2
4 files changed, 26 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 24aff755..da52c441 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 */
}