diff --git a/asn1/camel/camel.cnf b/asn1/camel/camel.cnf index 3264f847b1..c06569ca4e 100644 --- a/asn1/camel/camel.cnf +++ b/asn1/camel/camel.cnf @@ -131,10 +131,9 @@ tvbuff_t *parameter_tvb; guint8 digit_pair; guint8 i = 0, curr_offset; - char *time = (char *)(calloc (2*7 + 5 + 1, sizeof(char))); - - char c[ 2*7 + 5] = ""; /*temporary container*/ - time[ 2*7 + 5 +1 ] = '\0'; + char time[CAMEL_DATE_AND_TIME_LEN]; + char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/ + /* 2 digits per octet, 7 octets total + 5 delimiters */ for (curr_offset = 0; curr_offset < 7 ; curr_offset++) @@ -164,6 +163,8 @@ tvbuff_t *parameter_tvb; } /* Pretty print date */ + /* XXX - Should we use sprintf here instead of assembling the string by + * hand? */ time[0] = c[9]; time[1] = c[8]; @@ -195,6 +196,8 @@ tvbuff_t *parameter_tvb; time[16] = c[1]; time[17] = c[2]; time[18] = c[3]; + + time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0'; /*start = 0, length = 7*/ @@ -204,8 +207,8 @@ tvbuff_t *parameter_tvb; 0, 7, time); - free (time); - return 7; /* 7 octetes eaten*/ + + return 7; /* 7 octets eaten*/ #.END diff --git a/asn1/camel/packet-camel-template.c b/asn1/camel/packet-camel-template.c index a3a760e499..f3136b9ccb 100644 --- a/asn1/camel/packet-camel-template.c +++ b/asn1/camel/packet-camel-template.c @@ -109,6 +109,7 @@ static const true_false_string camel_extension_value = { }; #define EUROPEAN_DATE 1 #define AMERICAN_DATE 2 +#define CAMEL_DATE_AND_TIME_LEN 20 /* 2*5 + 4 + 5 + 1 (HH:MM:SS;mm/dd/yyyy) */ static enum_val_t date_options[] = { { "european", "DD/MM/YYYY", EUROPEAN_DATE }, @@ -505,7 +506,7 @@ static guint8 camel_pdu_size = 0; static int dissect_camel_camelPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { - char *version_ptr, *version_str; + char *version_ptr; opcode = 0; application_context_version = 0; diff --git a/epan/dissectors/packet-camel.c b/epan/dissectors/packet-camel.c index 56b83132e2..e9d8a253d1 100644 --- a/epan/dissectors/packet-camel.c +++ b/epan/dissectors/packet-camel.c @@ -651,6 +651,7 @@ static const true_false_string camel_extension_value = { }; #define EUROPEAN_DATE 1 #define AMERICAN_DATE 2 +#define CAMEL_DATE_AND_TIME_LEN 20 /* 2*5 + 4 + 5 + 1 (HH:MM:SS;mm/dd/yyyy) */ static enum_val_t date_options[] = { { "european", "DD/MM/YYYY", EUROPEAN_DATE }, @@ -3232,10 +3233,9 @@ dissect_camel_DateAndTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, guint8 digit_pair; guint8 i = 0, curr_offset; - char *time = (char *)(calloc (2*7 + 5 + 1, sizeof(char))); - - char c[ 2*7 + 5] = ""; /*temporary container*/ - time[ 2*7 + 5 +1 ] = '\0'; + char time[CAMEL_DATE_AND_TIME_LEN]; + char c[CAMEL_DATE_AND_TIME_LEN]; /*temporary container*/ + /* 2 digits per octet, 7 octets total + 5 delimiters */ for (curr_offset = 0; curr_offset < 7 ; curr_offset++) @@ -3265,6 +3265,8 @@ dissect_camel_DateAndTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, } /* Pretty print date */ + /* XXX - Should we use sprintf here instead of assembling the string by + * hand? */ time[0] = c[9]; time[1] = c[8]; @@ -3296,6 +3298,8 @@ dissect_camel_DateAndTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, time[16] = c[1]; time[17] = c[2]; time[18] = c[3]; + + time[CAMEL_DATE_AND_TIME_LEN - 1] = '\0'; /*start = 0, length = 7*/ @@ -3305,8 +3309,8 @@ dissect_camel_DateAndTime(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, 0, 7, time); - free (time); - return 7; /* 7 octetes eaten*/ + + return 7; /* 7 octets eaten*/ return offset; @@ -6830,7 +6834,7 @@ static guint8 camel_pdu_size = 0; static int dissect_camel_camelPDU(gboolean implicit_tag _U_, tvbuff_t *tvb, int offset, packet_info *pinfo _U_, proto_tree *tree, int hf_index) { - char *version_ptr, *version_str; + char *version_ptr; opcode = 0; application_context_version = 0; diff --git a/epan/dissectors/packet-ppp.c b/epan/dissectors/packet-ppp.c index 20a26144cc..962b68a19b 100644 --- a/epan/dissectors/packet-ppp.c +++ b/epan/dissectors/packet-ppp.c @@ -3254,8 +3254,10 @@ remove_escape_chars(tvbuff_t *tvb, int offset, int length) scanned_len++; i++; } - if (i == 0) + if (i == 0) { + g_free(buff); return NULL; + } next_tvb = tvb_new_real_data(buff,i,i); /* Arrange that the allocated packet data copy be freed when the diff --git a/wiretap/k12.c b/wiretap/k12.c index 3df194516e..05392bc914 100644 --- a/wiretap/k12.c +++ b/wiretap/k12.c @@ -375,6 +375,7 @@ int k12_open(wtap *wth, int *err, gchar **err_info _U_) { if (extra_len == 0 || name_len == 0 || stack_len == 0 || 0x20 + extra_len + name_len + stack_len > rec_len ) { + g_free(rec); return 0; }