Fix some memmory leaks

svn path=/trunk/; revision=12580
This commit is contained in:
Anders Broman 2004-11-22 22:19:03 +00:00
parent 214d684823
commit c45f9fee60
1 changed files with 19 additions and 4 deletions

View File

@ -307,6 +307,7 @@ dissect_sigcomp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
guint16 state_address;
guint16 state_instruction;
guint16 result_code;
gchar *partial_state_str;
/* Is this a SigComp message or not ? */
octet = tvb_get_guint8(tvb, offset);
@ -411,8 +412,10 @@ dissect_sigcomp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
offset = offset + len;
}
tvb_memcpy(tvb, partial_state, offset, partial_state_len);
proto_tree_add_bytes(sigcomp_tree,hf_sigcomp_partial_state,
tvb, offset, partial_state_len, partial_state);
partial_state_str = bytes_to_str(partial_state, partial_state_len);
proto_tree_add_string(sigcomp_tree,hf_sigcomp_partial_state,
tvb, offset, partial_state_len, partial_state_str);
g_free(partial_state_str);
offset = offset + partial_state_len;
proto_tree_add_text(sigcomp_tree, tvb, offset, -1, "Remaining SigComp message %u bytes",
tvb_reported_length_remaining(tvb, offset));
@ -429,7 +432,7 @@ dissect_sigcomp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
* state_instruction =
* TRUE = Indicates that state_* is in the stored state
*/
buff = g_malloc(65536);
buff = g_malloc(UDVM_MEMORY_SIZE);
p_id_start = 0;
state_begin = 0;
/* These values will be loaded from the buffered state in sigcomp_state_hdlr
@ -451,10 +454,22 @@ dissect_sigcomp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if ( result_code != 0 ){
proto_tree_add_text(sigcomp_tree, tvb, 0, -1,"Failed to Access state Ethereal UDVM diagnostic: %s.",
val_to_str(result_code, result_code_vals,"Unknown (%u)"));
g_free(buff);
return tvb_length(tvb);
}
udvm_tvb = tvb_new_real_data(buff,state_length+128,state_length+128);
/* Arrange that the allocated packet data copy be freed when the
* tvbuff is freed.
*/
tvb_set_free_cb( udvm_tvb, g_free );
/* Add the tvbuff to the list of tvbuffs to which the tvbuff we
* were handed refers, so it'll get cleaned up when that tvbuff
* is cleaned up.
*/
tvb_set_child_real_data_tvbuff( tvb, udvm_tvb );
udvm2_tvb = tvb_new_subset(udvm_tvb, 128, state_length, state_length);
/* TODO Check if buff needs to be free'd */
udvm_exe_item = proto_tree_add_text(sigcomp_tree, udvm2_tvb, 0, state_length,
@ -1915,7 +1930,7 @@ proto_register_sigcomp(void)
},
{ &hf_sigcomp_partial_state,
{ "Partial state identifier", "sigcomp.partial.state.identifier",
FT_BYTES, BASE_HEX, NULL, 0x0,
FT_STRING, BASE_NONE, NULL, 0x0,
"Partial state identifier", HFILL }
},
{ &hf_sigcomp_returned_feedback_item_len,