GMR-1 RR: revert g165b56afe7

We cannot use tvb_new_octet_aligned() for this GSM 7bits packed buffer.
Moreover tvb_free() call not removed was leading to a double free
attempt.

Closes #17055
This commit is contained in:
Pascal Quantin 2020-12-03 09:58:10 +01:00 committed by Wireshark GitLab Utility
parent 11bccd9e39
commit 26220f8045
1 changed files with 11 additions and 2 deletions

View File

@ -634,15 +634,24 @@ static const value_string rr_pos_display_flag_vals[] = {
GMR1_IE_FUNC(gmr1_ie_rr_pos_display)
{
gchar *txt_unpacked;
const unsigned char *txt_raw;
gchar *txt_packed, *txt_unpacked;
tvbuff_t *txt_packed_tvb;
int i;
/* Flag */
proto_tree_add_item(tree, hf_rr_pos_display_flag,
tvb, offset, 1, ENC_BIG_ENDIAN);
/* Get text in an aligned tvbuff */
txt_packed_tvb = tvb_new_octet_aligned(tvb, 8*offset+4, 84);
/* Do not use tvb_new_octet_aligned(), GSM 7bit packing bit parsing
goes from LSB to MSB so a trick is applied here for the last byte */
txt_raw = tvb_get_ptr(tvb, offset, 11);
txt_packed = (gchar*)wmem_alloc(wmem_packet_scope(), 11);
for (i=0; i<10; i++)
txt_packed[i] = (txt_raw[i] << 4) | (txt_raw[i+1] >> 4);
txt_packed[10] = txt_raw[10];
txt_packed_tvb = tvb_new_real_data(txt_packed, 11, 11);
/* Unpack text */
txt_unpacked = tvb_get_ts_23_038_7bits_string_packed(wmem_packet_scope(), txt_packed_tvb, 0, 12);