mirror of https://github.com/sipwise/libtcap.git
Change-Id: I4146ca808e673b2a4663eff52f418521e40b5063changes/01/12501/2
parent
9c7aaebcf8
commit
097d7903d0
@ -0,0 +1,186 @@
|
||||
diff --git a/asn1-compiled/INTEGER.c b/asn1-compiled/INTEGER.c
|
||||
index 56d02b4..0ab29e4 100644
|
||||
--- a/asn1-compiled/INTEGER.c
|
||||
+++ b/asn1-compiled/INTEGER.c
|
||||
@@ -996,6 +996,7 @@ asn_strtol_lim(const char *str, const char **end, long *lp) {
|
||||
case '-':
|
||||
last_digit_max++;
|
||||
sign = -1;
|
||||
+ /* fall through */
|
||||
case '+':
|
||||
str++;
|
||||
if(str >= *end) {
|
||||
diff --git a/asn1-compiled/OBJECT_IDENTIFIER.c b/asn1-compiled/OBJECT_IDENTIFIER.c
|
||||
index 066d562..2eaec9c 100644
|
||||
--- a/asn1-compiled/OBJECT_IDENTIFIER.c
|
||||
+++ b/asn1-compiled/OBJECT_IDENTIFIER.c
|
||||
@@ -296,8 +296,10 @@ OBJECT_IDENTIFIER__xer_body_decode(asn_TYPE_descriptor_t *td, void *sptr, const
|
||||
ret = OBJECT_IDENTIFIER_parse_arcs(
|
||||
(const char *)chunk_buf, chunk_size,
|
||||
arcs, arcs_count, &endptr);
|
||||
- if(ret != arcs_count)
|
||||
+ if(ret != arcs_count) {
|
||||
+ free(arcs);
|
||||
return XPBD_SYSTEM_FAILURE; /* assert?.. */
|
||||
+ }
|
||||
}
|
||||
|
||||
/*
|
||||
diff --git a/asn1-compiled/OCTET_STRING.c b/asn1-compiled/OCTET_STRING.c
|
||||
index 584def8..3cb9d81 100644
|
||||
--- a/asn1-compiled/OCTET_STRING.c
|
||||
+++ b/asn1-compiled/OCTET_STRING.c
|
||||
@@ -1594,6 +1594,9 @@ OCTET_STRING_encode_uper(asn_TYPE_descriptor_t *td,
|
||||
_ASN_ENCODE_FAILED;
|
||||
}
|
||||
|
||||
+ if(!st->buf)
|
||||
+ _ASN_ENCODE_FAILED;
|
||||
+
|
||||
/* X.691, #16.5: zero-length encoding */
|
||||
/* X.691, #16.6: short fixed length encoding (up to 2 octets) */
|
||||
/* X.691, #16.7: long fixed length encoding (up to 64K octets) */
|
||||
@@ -1712,16 +1715,18 @@ OCTET_STRING_print_utf8(asn_TYPE_descriptor_t *td, const void *sptr,
|
||||
void
|
||||
OCTET_STRING_free(asn_TYPE_descriptor_t *td, void *sptr, int contents_only) {
|
||||
OCTET_STRING_t *st = (OCTET_STRING_t *)sptr;
|
||||
- asn_OCTET_STRING_specifics_t *specs = td->specifics
|
||||
- ? (asn_OCTET_STRING_specifics_t *)td->specifics
|
||||
- : &asn_DEF_OCTET_STRING_specs;
|
||||
- asn_struct_ctx_t *ctx = (asn_struct_ctx_t *)
|
||||
- ((char *)st + specs->ctx_offset);
|
||||
+ asn_OCTET_STRING_specifics_t *specs;
|
||||
+ asn_struct_ctx_t *ctx;
|
||||
struct _stack *stck;
|
||||
|
||||
if(!td || !st)
|
||||
return;
|
||||
|
||||
+ specs = td->specifics
|
||||
+ ? (asn_OCTET_STRING_specifics_t *)td->specifics
|
||||
+ : &asn_DEF_OCTET_STRING_specs;
|
||||
+ ctx = (asn_struct_ctx_t *) ((char *)st + specs->ctx_offset);
|
||||
+
|
||||
ASN_DEBUG("Freeing %s as OCTET STRING", td->name);
|
||||
|
||||
if(st->buf) {
|
||||
diff --git a/asn1-compiled/constr_CHOICE.c b/asn1-compiled/constr_CHOICE.c
|
||||
index a9eb719..f0b5383 100644
|
||||
--- a/asn1-compiled/constr_CHOICE.c
|
||||
+++ b/asn1-compiled/constr_CHOICE.c
|
||||
@@ -670,7 +670,6 @@ CHOICE_decode_xer(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
|
||||
case -1:
|
||||
ctx->phase = 5;
|
||||
RETURN(RC_FAIL);
|
||||
- continue;
|
||||
case 1:
|
||||
ctx->phase = 3;
|
||||
/* Fall through */
|
||||
@@ -1029,12 +1028,14 @@ CHOICE_print(asn_TYPE_descriptor_t *td, const void *sptr, int ilevel,
|
||||
|
||||
void
|
||||
CHOICE_free(asn_TYPE_descriptor_t *td, void *ptr, int contents_only) {
|
||||
- asn_CHOICE_specifics_t *specs = (asn_CHOICE_specifics_t *)td->specifics;
|
||||
+ asn_CHOICE_specifics_t *specs;
|
||||
int present;
|
||||
|
||||
if(!td || !ptr)
|
||||
return;
|
||||
|
||||
+ specs = (asn_CHOICE_specifics_t *)td->specifics;
|
||||
+
|
||||
ASN_DEBUG("Freeing %s as CHOICE", td->name);
|
||||
|
||||
/*
|
||||
diff --git a/asn1-compiled/constr_SEQUENCE.c b/asn1-compiled/constr_SEQUENCE.c
|
||||
index bc7f4ad..f23fb89 100644
|
||||
--- a/asn1-compiled/constr_SEQUENCE.c
|
||||
+++ b/asn1-compiled/constr_SEQUENCE.c
|
||||
@@ -1149,8 +1149,10 @@ SEQUENCE_decode_uper(asn_codec_ctx_t *opt_codec_ctx, asn_TYPE_descriptor_t *td,
|
||||
if(!epres) _ASN_DECODE_STARVED;
|
||||
|
||||
/* Get the extensions map */
|
||||
- if(per_get_many_bits(pd, epres, 0, bmlength))
|
||||
+ if(per_get_many_bits(pd, epres, 0, bmlength)) {
|
||||
+ free(epres);
|
||||
_ASN_DECODE_STARVED;
|
||||
+ }
|
||||
|
||||
memset(&epmd, 0, sizeof(epmd));
|
||||
epmd.buffer = epres;
|
||||
diff --git a/asn1-compiled/per_encoder.c b/asn1-compiled/per_encoder.c
|
||||
index e76ef74..d7aae4f 100644
|
||||
--- a/asn1-compiled/per_encoder.c
|
||||
+++ b/asn1-compiled/per_encoder.c
|
||||
@@ -123,7 +123,7 @@ uper_encode_internal(asn_TYPE_descriptor_t *td, asn_per_constraints_t *constrain
|
||||
/*
|
||||
* Invoke type-specific encoder.
|
||||
*/
|
||||
- if(!td || !td->uper_encoder)
|
||||
+ if(!(td && td->uper_encoder))
|
||||
_ASN_ENCODE_FAILED; /* PER is not compiled in */
|
||||
|
||||
po.buffer = po.tmpspace;
|
||||
diff --git a/asn1-compiled/per_opentype.c b/asn1-compiled/per_opentype.c
|
||||
index 03a31d2..da26841 100644
|
||||
--- a/asn1-compiled/per_opentype.c
|
||||
+++ b/asn1-compiled/per_opentype.c
|
||||
@@ -65,7 +65,8 @@ uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
|
||||
asn_per_data_t spd;
|
||||
size_t padding;
|
||||
|
||||
- _ASN_STACK_OVERFLOW_CHECK(ctx);
|
||||
+ if(_ASN_STACK_OVERFLOW_CHECK(ctx))
|
||||
+ _ASN_DECODE_FAILED;
|
||||
|
||||
ASN_DEBUG("Getting open type %s...", td->name);
|
||||
|
||||
@@ -106,10 +107,10 @@ uper_open_type_get_simple(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
|
||||
if(rv.code == RC_OK) {
|
||||
/* Check padding validity */
|
||||
padding = spd.nbits - spd.nboff;
|
||||
- if ((padding < 8 ||
|
||||
+ if ((padding < 8 ||
|
||||
/* X.691#10.1.3 */
|
||||
(spd.nboff == 0 && spd.nbits == 8 && spd.buffer == buf)) &&
|
||||
- per_get_few_bits(&spd, padding) == 0) {
|
||||
+ per_get_few_bits(&spd, padding) == 0) {
|
||||
/* Everything is cool */
|
||||
FREEMEM(buf);
|
||||
return rv;
|
||||
@@ -138,7 +139,8 @@ uper_open_type_get_complex(asn_codec_ctx_t *ctx, asn_TYPE_descriptor_t *td,
|
||||
asn_dec_rval_t rv;
|
||||
ssize_t padding;
|
||||
|
||||
- _ASN_STACK_OVERFLOW_CHECK(ctx);
|
||||
+ if(_ASN_STACK_OVERFLOW_CHECK(ctx))
|
||||
+ _ASN_DECODE_FAILED;
|
||||
|
||||
ASN_DEBUG("Getting open type %s from %s", td->name,
|
||||
per_data_string(pd));
|
||||
diff --git a/asn1-compiled/per_support.c b/asn1-compiled/per_support.c
|
||||
index 2481fff..4bd6318 100644
|
||||
--- a/asn1-compiled/per_support.c
|
||||
+++ b/asn1-compiled/per_support.c
|
||||
@@ -12,7 +12,7 @@ per_data_string(asn_per_data_t *pd) {
|
||||
static char buf[2][32];
|
||||
static int n;
|
||||
n = (n+1) % 2;
|
||||
- snprintf(buf[n], sizeof(buf),
|
||||
+ snprintf(buf[n], sizeof(buf[n]),
|
||||
"{m=%ld span %+ld[%d..%d] (%d)}",
|
||||
(long)pd->moved,
|
||||
(((long)pd->buffer) & 0xf),
|
||||
@@ -342,8 +342,10 @@ per_put_few_bits(asn_per_outp_t *po, uint32_t bits, int obits) {
|
||||
buf[2] = bits >> 8,
|
||||
buf[3] = bits;
|
||||
else {
|
||||
- per_put_few_bits(po, bits >> (obits - 24), 24);
|
||||
- per_put_few_bits(po, bits, obits - 24);
|
||||
+ if (obits >= 24) { /* probably a coverity false positive */
|
||||
+ per_put_few_bits(po, bits >> (obits - 24), 24);
|
||||
+ per_put_few_bits(po, bits, obits - 24);
|
||||
+ }
|
||||
}
|
||||
|
||||
ASN_DEBUG("[PER out %u/%x => %02x buf+%ld]",
|
Loading…
Reference in new issue