diff options
author | Lev Walkin <vlm@lionet.info> | 2012-01-23 04:05:13 +0000 |
---|---|---|
committer | Lev Walkin <vlm@lionet.info> | 2012-01-23 04:05:13 +0000 |
commit | 3d6fcfecd7aeff611ee3d16c5b2e1bc5187accee (patch) | |
tree | 73cc5eedb604045c3614079f62a32e8eb1180443 | |
parent | 1d44923c50a1a13edff92bd46dc17d3e250e241b (diff) |
more robust pre-allocation; credits to Yuriy Olkhovyy
-rw-r--r-- | skeletons/INTEGER.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c index e7a5ba67..c6e1d910 100644 --- a/skeletons/INTEGER.c +++ b/skeletons/INTEGER.c @@ -339,6 +339,9 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun ASN_DEBUG("INTEGER body %ld 0x%2x..0x%2x", (long)chunk_size, *lstart, lstop[-1]); + if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) + return XPBD_SYSTEM_FAILURE; + /* * We may have received a tag here. It will be processed inline. * Use strtoul()-like code and serialize the result. @@ -447,8 +450,6 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun * places as a decimal value. * Switch decoding mode. */ ASN_DEBUG("INTEGER re-evaluate as hex form"); - if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) - return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; @@ -476,8 +477,6 @@ INTEGER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const void *chun continue; case ST_DIGITS: ASN_DEBUG("INTEGER re-evaluate as hex form"); - if(INTEGER_st_prealloc(st, (chunk_size/3) + 1)) - return XPBD_SYSTEM_FAILURE; state = ST_SKIPSPHEX; lp = lstart - 1; continue; |