aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--asn1c/tests/data-70/data-70-55.in5
-rw-r--r--asn1c/tests/data-70/data-70-56.in5
-rw-r--r--asn1c/tests/data-70/data-70-57-D.in5
-rw-r--r--asn1c/tests/data-70/data-70-58-D.in5
-rw-r--r--asn1c/tests/data-70/data-70-59-D.in5
-rw-r--r--asn1c/tests/data-70/data-70-60-D.in5
-rw-r--r--asn1c/tests/data-70/data-70-61-D.in5
-rw-r--r--asn1c/tests/data-70/data-70-62-D.in9
-rw-r--r--skeletons/OBJECT_IDENTIFIER.c23
-rw-r--r--skeletons/RELATIVE-OID.c10
10 files changed, 60 insertions, 17 deletions
diff --git a/asn1c/tests/data-70/data-70-55.in b/asn1c/tests/data-70/data-70-55.in
new file mode 100644
index 00000000..7be4ca5b
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-55.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid>123.456.789.101112</roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-56.in b/asn1c/tests/data-70/data-70-56.in
new file mode 100644
index 00000000..7a7ba071
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-56.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid> 123.456.789.101112 </roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-57-D.in b/asn1c/tests/data-70/data-70-57-D.in
new file mode 100644
index 00000000..74da9b90
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-57-D.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid> <!--/--> 123.456.789.101112</roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-58-D.in b/asn1c/tests/data-70/data-70-58-D.in
new file mode 100644
index 00000000..252345d2
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-58-D.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid>123.456.789.101112<!--/--></roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-59-D.in b/asn1c/tests/data-70/data-70-59-D.in
new file mode 100644
index 00000000..2d989d24
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-59-D.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid>123.456.789.101112<!--/--> </roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-60-D.in b/asn1c/tests/data-70/data-70-60-D.in
new file mode 100644
index 00000000..11be5d73
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-60-D.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid>123.456.789.101112 <!--/--></roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-61-D.in b/asn1c/tests/data-70/data-70-61-D.in
new file mode 100644
index 00000000..5c47c9fc
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-61-D.in
@@ -0,0 +1,5 @@
+<PDU>
+ <set>
+ <roid>123.456.789.101112 <!--/--> </roid>
+ </set>
+</PDU>
diff --git a/asn1c/tests/data-70/data-70-62-D.in b/asn1c/tests/data-70/data-70-62-D.in
new file mode 100644
index 00000000..cb790d28
--- /dev/null
+++ b/asn1c/tests/data-70/data-70-62-D.in
@@ -0,0 +1,9 @@
+<PDU>
+ <set>
+ <roid>
+ <!-- This is a special comment -->
+ 123.456.789.101112
+ <!-- This is a special comment too -->
+ </roid>
+ </set>
+</PDU>
diff --git a/skeletons/OBJECT_IDENTIFIER.c b/skeletons/OBJECT_IDENTIFIER.c
index c1f58843..2939f25a 100644
--- a/skeletons/OBJECT_IDENTIFIER.c
+++ b/skeletons/OBJECT_IDENTIFIER.c
@@ -282,15 +282,13 @@ OBJECT_IDENTIFIER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const
arcs_count = OBJECT_IDENTIFIER_parse_arcs(
(const char *)chunk_buf, chunk_size, arcs,
sizeof(s_arcs)/sizeof(s_arcs[0]), &endptr);
- if(arcs_count <= 0) {
+ if(arcs_count < 0) {
/* Expecting more than zero arcs */
return XPBD_BROKEN_ENCODING;
+ } else if(arcs_count == 0) {
+ return XPBD_NOT_BODY_IGNORE;
}
- if(endptr < chunk_end) {
- /* We have a tail of unrecognized data. Check its safety. */
- if(!xer_is_whitespace(endptr, chunk_end - endptr))
- return XPBD_BROKEN_ENCODING;
- }
+ assert(endptr == chunk_end);
if((size_t)arcs_count > sizeof(s_arcs)/sizeof(s_arcs[0])) {
arcs = (long *)MALLOC(arcs_count * sizeof(long));
@@ -745,16 +743,19 @@ OBJECT_IDENTIFIER_parse_arcs(const char *oid_text, ssize_t oid_txt_length,
/* Finalize last arc */
switch(state) {
case ST_LEADSPACE:
- case ST_WAITDIGITS:
- errno = EINVAL;
- return -1;
+ return 0; /* No OID found in input data */
case ST_DIGITS:
_OID_CAPTURE_ARC(value_start, oid_text);
- /* Fall through */
+ return arcs_count;
+ case ST_WAITDIGITS:
+ errno = EINVAL; /* Broken OID */
+ return -1;
case ST_TAILSPACE:
- default:
return arcs_count;
}
+
+ errno = EINVAL; /* Broken OID */
+ return -1;
}
diff --git a/skeletons/RELATIVE-OID.c b/skeletons/RELATIVE-OID.c
index 983fc094..4275c0ab 100644
--- a/skeletons/RELATIVE-OID.c
+++ b/skeletons/RELATIVE-OID.c
@@ -106,14 +106,12 @@ RELATIVE_OID__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void
(const char *)chunk_buf, chunk_size,
arcs, sizeof(s_arcs)/sizeof(s_arcs[0]), &endptr);
if(arcs_count < 0) {
- /* Expecting at least zero arcs */
+ /* Expecting at least one arc arcs */
return XPBD_BROKEN_ENCODING;
+ } else if(arcs_count == 0) {
+ return XPBD_NOT_BODY_IGNORE;
}
- if(endptr < chunk_end) {
- /* We have a tail of unrecognized data. Check its safety. */
- if(!xer_is_whitespace(endptr, chunk_end - endptr))
- return XPBD_BROKEN_ENCODING;
- }
+ assert(endptr == chunk_end);
if((size_t)arcs_count > sizeof(s_arcs)/sizeof(s_arcs[0])) {
arcs = (long *)MALLOC(arcs_count * sizeof(long));