remove undefined behavior
diff --git a/skeletons/INTEGER.c b/skeletons/INTEGER.c
index 66a96f4..798fb28 100644
--- a/skeletons/INTEGER.c
+++ b/skeletons/INTEGER.c
@@ -633,13 +633,14 @@
if(asn_ulong2INTEGER(st, uvalue))
ASN__DECODE_FAILED;
} else {
- unsigned long svalue = 0;
+ unsigned long uvalue = 0;
+ long svalue;
if(uper_get_constrained_whole_number(pd,
- &svalue, ct->range_bits))
+ &uvalue, ct->range_bits))
ASN__DECODE_STARVED;
- ASN_DEBUG("Got value %ld + low %ld",
- svalue, ct->lower_bound);
- svalue += ct->lower_bound;
+ ASN_DEBUG("Got value %lu + low %ld",
+ uvalue, ct->lower_bound);
+ svalue = ct->lower_bound + (long)uvalue;
if(asn_long2INTEGER(st, svalue))
ASN__DECODE_FAILED;
}
diff --git a/skeletons/asn_bit_data.c b/skeletons/asn_bit_data.c
index 2852c2d..378496d 100644
--- a/skeletons/asn_bit_data.c
+++ b/skeletons/asn_bit_data.c
@@ -86,7 +86,7 @@
else if(off <= 24)
accum = ((buf[0] << 16) + (buf[1] << 8) + buf[2]) >> (24 - off);
else if(off <= 31)
- accum = ((buf[0] << 24) + (buf[1] << 16)
+ accum = (((uint32_t)buf[0] << 24) + (buf[1] << 16)
+ (buf[2] << 8) + (buf[3])) >> (32 - off);
else if(nbits <= 31) {
asn_bit_data_t tpd = *pd;