Commit 4f530b52 authored by Lev Walkin's avatar Lev Walkin

Memory leak fixed in SET OF / SEQUENCE OF in wrong encoding processing

parent 9ab21b89
...@@ -10,6 +10,8 @@ ...@@ -10,6 +10,8 @@
* Multiple enhancements by Daniele Varrazzo <daniele.varrazzo@gmail.com> * Multiple enhancements by Daniele Varrazzo <daniele.varrazzo@gmail.com>
* Fixed explicit tagging of an in-lined constructed type. * Fixed explicit tagging of an in-lined constructed type.
(Severity: low; Security impact: none). (Severity: low; Security impact: none).
* Memory leak fixed in SET OF / SEQUENCE OF when wrong encoding
is encountered. (Severity: medium; Security impact: low)
0.9.21: 2006-Sep-17 0.9.21: 2006-Sep-17
......
...@@ -227,6 +227,8 @@ SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td, ...@@ -227,6 +227,8 @@ SET_OF_decode_ber(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
} }
/* Fall through */ /* Fall through */
case RC_FAIL: /* Fatal error */ case RC_FAIL: /* Fatal error */
ASN_STRUCT_FREE(*elm->type, ctx->ptr);
ctx->ptr = 0;
RETURN(RC_FAIL); RETURN(RC_FAIL);
} /* switch(rval) */ } /* switch(rval) */
...@@ -787,8 +789,10 @@ SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel, ...@@ -787,8 +789,10 @@ SET_OF_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
void void
SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
if(td && ptr) { if(td && ptr) {
asn_SET_OF_specifics_t *specs;
asn_TYPE_member_t *elm = td->elements; asn_TYPE_member_t *elm = td->elements;
asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr); asn_anonymous_set_ *list = _A_SET_FROM_VOID(ptr);
asn_struct_ctx_t *ctx; /* Decoder context */
int i; int i;
/* /*
...@@ -807,6 +811,13 @@ SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) { ...@@ -807,6 +811,13 @@ SET_OF_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
if(!contents_only) { if(!contents_only) {
FREEMEM(ptr); FREEMEM(ptr);
} }
specs = (asn_SET_OF_specifics_t *)td->specifics;
ctx = (asn_struct_ctx_t *)((char *)ptr + specs->ctx_offset);
if(ctx->ptr) {
ASN_STRUCT_FREE(*elm->type, ctx->ptr);
ctx->ptr = 0;
}
} }
} }
......
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