aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLev Walkin <vlm@lionet.info>2012-01-23 04:05:13 +0000
committerLev Walkin <vlm@lionet.info>2012-01-23 04:05:13 +0000
commit3d6fcfecd7aeff611ee3d16c5b2e1bc5187accee (patch)
tree73cc5eedb604045c3614079f62a32e8eb1180443
parent1d44923c50a1a13edff92bd46dc17d3e250e241b (diff)
more robust pre-allocation; credits to Yuriy Olkhovyy
-rw-r--r--skeletons/INTEGER.c7
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;