diff options
author | Jaap Keuter <jaap.keuter@xs4all.nl> | 2013-01-22 07:18:20 +0000 |
---|---|---|
committer | Jaap Keuter <jaap.keuter@xs4all.nl> | 2013-01-22 07:18:20 +0000 |
commit | 6a6aaf7409d4329b5e7f8d4702f5911f72d62458 (patch) | |
tree | de12e3dabe7d6b639e5653d5a0095a43ebff9f86 | |
parent | 332012288be54a2e5a589d9967519a8582d34c5b (diff) |
Fix for CID 717414-717435.
Never ever access a string in a value string by its array index.
Use the proper access functions (val_to_str[_ext] and friends).
Also: make clean compile, so move out of dirty dissectors.
svn path=/trunk/; revision=47209
-rw-r--r-- | epan/dissectors/Makefile.common | 2 | ||||
-rw-r--r-- | epan/dissectors/packet-gsm_a_common.c | 53 |
2 files changed, 29 insertions, 26 deletions
diff --git a/epan/dissectors/Makefile.common b/epan/dissectors/Makefile.common index cac955a8e3..5b09f87f70 100644 --- a/epan/dissectors/Makefile.common +++ b/epan/dissectors/Makefile.common @@ -586,6 +586,7 @@ DISSECTOR_SRC = \ packet-gprs-llc.c \ packet-gre.c \ packet-gsm_a_bssmap.c \ + packet-gsm_a_common.c \ packet-gsm_a_dtap.c \ packet-gsm_a_gm.c \ packet-gsm_a_rp.c \ @@ -1207,7 +1208,6 @@ DISSECTOR_SRC = \ # Files that create warnings while building # DIRTY_DISSECTOR_SRC = \ - packet-gsm_a_common.c \ packet-x11.c # diff --git a/epan/dissectors/packet-gsm_a_common.c b/epan/dissectors/packet-gsm_a_common.c index 29189eeec8..2668bbe68c 100644 --- a/epan/dissectors/packet-gsm_a_common.c +++ b/epan/dissectors/packet-gsm_a_common.c @@ -1086,49 +1086,49 @@ const char* get_gsm_a_msg_string(int pdu_type, int idx) switch (pdu_type) { case GSM_A_PDU_TYPE_BSSMAP: - msg_string = gsm_bssmap_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_bssmap_elem_strings, "GSM_A_PDU_TYPE_BSSMAP(%u)"); break; case GSM_A_PDU_TYPE_DTAP: - msg_string = gsm_dtap_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_dtap_elem_strings, "GSM_A_PDU_TYPE_DTAP(%u)"); break; case GSM_A_PDU_TYPE_RP: - msg_string = gsm_rp_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_rp_elem_strings, "GSM_A_PDU_TYPE_RP(%u)"); break; case GSM_A_PDU_TYPE_RR: - msg_string = gsm_rr_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_rr_elem_strings, "GSM_A_PDU_TYPE_RR(%u)"); break; case GSM_A_PDU_TYPE_COMMON: - msg_string = gsm_common_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_common_elem_strings, "GSM_A_PDU_TYPE_COMMON(%u)"); break; case GSM_A_PDU_TYPE_GM: - msg_string = gsm_gm_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_gm_elem_strings, "GSM_A_PDU_TYPE_GM(%u)"); break; case GSM_A_PDU_TYPE_BSSLAP: - msg_string = gsm_bsslap_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_bsslap_elem_strings, "GSM_A_PDU_TYPE_BSSLAP(%u)"); break; case GSM_PDU_TYPE_BSSMAP_LE: - msg_string = gsm_bssmap_le_elem_strings[idx].strptr; + msg_string = val_to_str(idx, gsm_bssmap_le_elem_strings, "GSM_PDU_TYPE_BSSMAP_LE(%u)"); break; case NAS_PDU_TYPE_COMMON: - msg_string = nas_eps_common_elem_strings[idx].strptr; + msg_string = val_to_str(idx, nas_eps_common_elem_strings, "NAS_PDU_TYPE_COMMON(%u)"); break; case NAS_PDU_TYPE_EMM: - msg_string = nas_emm_elem_strings[idx].strptr; + msg_string = val_to_str(idx, nas_emm_elem_strings, "NAS_PDU_TYPE_EMM(%u)"); break; case NAS_PDU_TYPE_ESM: - msg_string = nas_esm_elem_strings[idx].strptr; + msg_string = val_to_str(idx, nas_esm_elem_strings, "NAS_PDU_TYPE_ESM(%u)"); break; case SGSAP_PDU_TYPE: - msg_string = sgsap_elem_strings[idx].strptr; + msg_string = val_to_str(idx, sgsap_elem_strings, "SGSAP_PDU_TYPE(%u)"); break; case BSSGP_PDU_TYPE: - msg_string = bssgp_elem_strings[idx].strptr; + msg_string = val_to_str(idx, bssgp_elem_strings, "BSSGP_PDU_TYPE(%u)"); break; case GMR1_IE_COMMON: - msg_string = gmr1_ie_common_strings[idx].strptr; + msg_string = val_to_str(idx, gmr1_ie_common_strings, "GMR1_IE_COMMON(%u)"); break; case GMR1_IE_RR: - msg_string = gmr1_ie_rr_strings[idx].strptr; + msg_string = val_to_str(idx, gmr1_ie_rr_strings, "GMR1_IE_RR(%u)"); break; default: DISSECTOR_ASSERT_NOT_REACHED(); @@ -1222,7 +1222,7 @@ guint16 elem_tlv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1 + lengt_length, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1309,7 +1309,7 @@ guint16 elem_telv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 ie proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1 + lengt_length, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1386,7 +1386,7 @@ guint16 elem_tlv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 i item = proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1 + 2, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1461,7 +1461,7 @@ guint16 elem_tv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint8 iei, proto_tree_add_text(tree, tvb, curr_offset, -1, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1534,7 +1534,7 @@ guint16 elem_tv_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, guint proto_tree_add_text(tree, tvb, curr_offset, -1, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1592,6 +1592,9 @@ guint16 elem_t(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint8 i SET_ELEM_VARS(pdu_type, elem_names, elem_ett, elem_funcs); + (void)elem_ett; + (void)elem_funcs; + oct = tvb_get_guint8(tvb, curr_offset); if (oct == iei) @@ -1600,7 +1603,7 @@ guint16 elem_t(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo _U_, guint8 i get_hf_elem_id(pdu_type), tvb, curr_offset, 1, oct, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); consumed = 1; @@ -1635,7 +1638,7 @@ elem_lv(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_type, int proto_tree_add_text(tree, tvb, curr_offset, parm_len + 1, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1696,7 +1699,7 @@ guint16 elem_lv_e(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_ item = proto_tree_add_text(tree, tvb, curr_offset, parm_len + 2, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1772,7 +1775,7 @@ guint16 elem_v(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint pdu_typ proto_tree_add_text(tree, tvb, curr_offset, 0, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), (name_add == NULL) || (name_add[0] == '\0') ? "" : name_add); subtree = proto_item_add_subtree(item, elem_ett[idx]); @@ -1815,7 +1818,7 @@ guint16 elem_v_short(tvbuff_t *tvb, proto_tree *tree, packet_info *pinfo, gint p item = proto_tree_add_text(tree, tvb, curr_offset, 0, "%s%s", - elem_names[idx].strptr, + val_to_str(idx, elem_names, "Unknown(%u)"), ""); subtree = proto_item_add_subtree(item, elem_ett[idx]); |