Commit ec0aef7e authored by v0-e's avatar v0-e

jer: RELATIVE-OID add quotes

parent d57abfb6
...@@ -6,11 +6,14 @@ ...@@ -6,11 +6,14 @@
#include <asn_internal.h> #include <asn_internal.h>
#include <RELATIVE-OID.h> #include <RELATIVE-OID.h>
#define CQUOTE 0x22
static enum jer_pbd_rval static enum jer_pbd_rval
RELATIVE_OID__jer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, RELATIVE_OID__jer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
const void *chunk_buf, size_t chunk_size) { const void *chunk_buf, size_t chunk_size) {
RELATIVE_OID_t *st = (RELATIVE_OID_t *)sptr; RELATIVE_OID_t *st = (RELATIVE_OID_t *)sptr;
const char *chunk_end = (const char *)chunk_buf + chunk_size; const char *chunk_end = (const char *)chunk_buf + chunk_size;
const char* p = (const char*)chunk_buf;
const char *endptr; const char *endptr;
asn_oid_arc_t s_arcs[6]; asn_oid_arc_t s_arcs[6];
asn_oid_arc_t *arcs = s_arcs; asn_oid_arc_t *arcs = s_arcs;
...@@ -19,6 +22,22 @@ RELATIVE_OID__jer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr, ...@@ -19,6 +22,22 @@ RELATIVE_OID__jer_body_decode(const asn_TYPE_descriptor_t *td, void *sptr,
(void)td; (void)td;
/* Strip quotes */
for (; p < chunk_end; ++p) {
if (*p == CQUOTE) {
++p;
break;
}
}
for (; chunk_end > p; --chunk_end) {
if (*chunk_end == CQUOTE)
break;
}
if (chunk_end - p < 0)
return JPBD_BROKEN_ENCODING;
chunk_size = chunk_end - p;
chunk_buf = p;
num_arcs = OBJECT_IDENTIFIER_parse_arcs( num_arcs = OBJECT_IDENTIFIER_parse_arcs(
(const char *)chunk_buf, chunk_size, arcs, (const char *)chunk_buf, chunk_size, arcs,
sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr); sizeof(s_arcs) / sizeof(s_arcs[0]), &endptr);
...@@ -65,6 +84,7 @@ RELATIVE_OID_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr, ...@@ -65,6 +84,7 @@ RELATIVE_OID_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
asn_app_consume_bytes_f *cb, void *app_key) { asn_app_consume_bytes_f *cb, void *app_key) {
const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr; const RELATIVE_OID_t *st = (const RELATIVE_OID_t *)sptr;
asn_enc_rval_t er = {0,0,0}; asn_enc_rval_t er = {0,0,0};
ssize_t ro_encoded = 0;
(void)ilevel; /* Unused argument */ (void)ilevel; /* Unused argument */
(void)flags; /* Unused argument */ (void)flags; /* Unused argument */
...@@ -72,8 +92,14 @@ RELATIVE_OID_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr, ...@@ -72,8 +92,14 @@ RELATIVE_OID_encode_jer(const asn_TYPE_descriptor_t *td, const void *sptr,
if(!st || !st->buf) if(!st || !st->buf)
ASN__ENCODE_FAILED; ASN__ENCODE_FAILED;
er.encoded = RELATIVE_OID__dump_body(st, cb, app_key); ASN__CALLBACK("\"", 1);
if(er.encoded < 0) ASN__ENCODE_FAILED; ro_encoded = RELATIVE_OID__dump_body(st, cb, app_key);
if(ro_encoded < 0) goto cb_failed;
er.encoded += ro_encoded;
ASN__CALLBACK("\"", 1);
ASN__ENCODED_OK(er); ASN__ENCODED_OK(er);
cb_failed:
ASN__ENCODE_FAILED;
} }
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