From db72eb4e3b98e5533030d2b146c7bd8077a5e65a Mon Sep 17 00:00:00 2001 From: Martin Kaiser Date: Mon, 22 Jun 2015 17:48:54 -0700 Subject: [PATCH] wmem_tree_new_autoreset() never returns NULL Change-Id: I497b77dec1eb4617179d492838ecd7d267539ba4 Reviewed-on: https://code.wireshark.org/review/9043 Reviewed-by: Martin Kaiser --- epan/dissectors/packet-hdcp.c | 156 +++++++++++++++++----------------- epan/dissectors/packet-zvt.c | 39 ++++----- 2 files changed, 92 insertions(+), 103 deletions(-) diff --git a/epan/dissectors/packet-hdcp.c b/epan/dissectors/packet-hdcp.c index 6b71300ad4..bb3c0ccbd9 100644 --- a/epan/dissectors/packet-hdcp.c +++ b/epan/dissectors/packet-hdcp.c @@ -37,7 +37,7 @@ void proto_register_hdcp(void); static int proto_hdcp = -1; -static wmem_tree_t *transactions = NULL; +static wmem_tree_t *transactions; static gint ett_hdcp = -1; @@ -139,14 +139,12 @@ dissect_hdcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_ } else { /* we've not yet dissected the response */ - if (transactions) { - hdcp_trans = wmem_new(wmem_file_scope(), hdcp_transaction_t); - hdcp_trans->rqst_frame = PINFO_FD_NUM(pinfo); - hdcp_trans->resp_frame = 0; - hdcp_trans->rqst_type = reg; - wmem_tree_insert32(transactions, - hdcp_trans->rqst_frame, (void *)hdcp_trans); - } + hdcp_trans = wmem_new(wmem_file_scope(), hdcp_transaction_t); + hdcp_trans->rqst_frame = PINFO_FD_NUM(pinfo); + hdcp_trans->resp_frame = 0; + hdcp_trans->rqst_type = reg; + wmem_tree_insert32(transactions, + hdcp_trans->rqst_frame, (void *)hdcp_trans); } } else { @@ -173,79 +171,77 @@ dissect_hdcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_ else { /* transmitter reads from receiver */ - if (transactions) { - hdcp_trans = (hdcp_transaction_t *)wmem_tree_lookup32_le( - transactions, PINFO_FD_NUM(pinfo)); - if (hdcp_trans) { - if (hdcp_trans->resp_frame==0) { - /* there's a pending request, this packet is the response */ - hdcp_trans->resp_frame = PINFO_FD_NUM(pinfo); - } + hdcp_trans = (hdcp_transaction_t *)wmem_tree_lookup32_le( + transactions, PINFO_FD_NUM(pinfo)); + if (hdcp_trans) { + if (hdcp_trans->resp_frame==0) { + /* there's a pending request, this packet is the response */ + hdcp_trans->resp_frame = PINFO_FD_NUM(pinfo); + } - if (hdcp_trans->resp_frame== PINFO_FD_NUM(pinfo)) { - /* we found the request that corresponds to our response */ - col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL, "send %s", - val_to_str_const(hdcp_trans->rqst_type, - hdcp_reg, "unknown (0x%x)")); - it = proto_tree_add_uint_format(hdcp_tree, hf_hdcp_resp_to, - NULL, 0, 0, hdcp_trans->rqst_frame, - "Response to frame %d (content of register %s)", - hdcp_trans->rqst_frame, - val_to_str_const(hdcp_trans->rqst_type, - hdcp_reg, "unknown (0x%x)")); - PROTO_ITEM_SET_GENERATED(it); - switch (hdcp_trans->rqst_type) { - case REG_BKSV: - b_ksv = tvb_get_letoh40(tvb, - ptvcursor_current_offset(cursor)); - proto_tree_add_uint64_format(hdcp_tree, hf_hdcp_b_ksv, - tvb, ptvcursor_current_offset(cursor), 5, - b_ksv, "B_ksv 0x%010" G_GINT64_MODIFIER "x", - b_ksv); - ptvcursor_advance(cursor, 5); - break; - case REG_BCAPS: - ptvcursor_add_no_advance(cursor, - hf_hdcp_hdmi_reserved, 1, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_repeater, 1, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_ksv_fifo, 1, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_fast_trans, 1, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_features, 1, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_fast_reauth, 1, ENC_LITTLE_ENDIAN); - break; - case REG_BSTATUS: - ptvcursor_add_no_advance(cursor, - hf_hdcp_hdmi_mode, 2, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_max_casc_exc, 2, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_depth, 2, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_max_devs_exc, 2, ENC_LITTLE_ENDIAN); - ptvcursor_add_no_advance(cursor, - hf_hdcp_downstream, 2, ENC_LITTLE_ENDIAN); - break; - } - } - } + if (hdcp_trans->resp_frame== PINFO_FD_NUM(pinfo)) { + /* we found the request that corresponds to our response */ + col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL, "send %s", + val_to_str_const(hdcp_trans->rqst_type, + hdcp_reg, "unknown (0x%x)")); + it = proto_tree_add_uint_format(hdcp_tree, hf_hdcp_resp_to, + NULL, 0, 0, hdcp_trans->rqst_frame, + "Response to frame %d (content of register %s)", + hdcp_trans->rqst_frame, + val_to_str_const(hdcp_trans->rqst_type, + hdcp_reg, "unknown (0x%x)")); + PROTO_ITEM_SET_GENERATED(it); + switch (hdcp_trans->rqst_type) { + case REG_BKSV: + b_ksv = tvb_get_letoh40(tvb, + ptvcursor_current_offset(cursor)); + proto_tree_add_uint64_format(hdcp_tree, hf_hdcp_b_ksv, + tvb, ptvcursor_current_offset(cursor), 5, + b_ksv, "B_ksv 0x%010" G_GINT64_MODIFIER "x", + b_ksv); + ptvcursor_advance(cursor, 5); + break; + case REG_BCAPS: + ptvcursor_add_no_advance(cursor, + hf_hdcp_hdmi_reserved, 1, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_repeater, 1, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_ksv_fifo, 1, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_fast_trans, 1, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_features, 1, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_fast_reauth, 1, ENC_LITTLE_ENDIAN); + break; + case REG_BSTATUS: + ptvcursor_add_no_advance(cursor, + hf_hdcp_hdmi_mode, 2, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_max_casc_exc, 2, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_depth, 2, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_max_devs_exc, 2, ENC_LITTLE_ENDIAN); + ptvcursor_add_no_advance(cursor, + hf_hdcp_downstream, 2, ENC_LITTLE_ENDIAN); + break; + } + } + } - if (!hdcp_trans || hdcp_trans->resp_frame!=PINFO_FD_NUM(pinfo)) { - /* the packet isn't a response to a request from the - * transmitter; it must be a link verification */ - if (tvb_reported_length_remaining( - tvb, ptvcursor_current_offset(cursor)) == 2) { - col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL, - "send link verification Ri'"); - ptvcursor_add_no_advance(cursor, - hf_hdcp_link_vfy, 2, ENC_LITTLE_ENDIAN); - } - } - } + if (!hdcp_trans || hdcp_trans->resp_frame!=PINFO_FD_NUM(pinfo)) { + /* the packet isn't a response to a request from the + * transmitter; it must be a link verification */ + if (tvb_reported_length_remaining( + tvb, ptvcursor_current_offset(cursor)) == 2) { + col_append_sep_fstr(pinfo->cinfo, COL_INFO, NULL, + "send link verification Ri'"); + ptvcursor_add_no_advance(cursor, + hf_hdcp_link_vfy, 2, ENC_LITTLE_ENDIAN); + } + } } ptvcursor_free(cursor); diff --git a/epan/dissectors/packet-zvt.c b/epan/dissectors/packet-zvt.c index 34e9866476..74ca54f01a 100644 --- a/epan/dissectors/packet-zvt.c +++ b/epan/dissectors/packet-zvt.c @@ -504,22 +504,18 @@ dissect_zvt_apdu(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tre proto_tree_add_item(apdu_tree, hf_zvt_aprc, tvb, offset, 1, ENC_BIG_ENDIAN); offset++; - /* XXX - can this ever be NULL? */ - if (transactions) { - zvt_trans = (zvt_transaction_t *)wmem_tree_lookup32_le( - transactions, PINFO_FD_NUM(pinfo)); - if (zvt_trans && zvt_trans->resp_frame==0) { - /* there's a pending request, this packet is the response */ - zvt_trans->resp_frame = PINFO_FD_NUM(pinfo); - } - - if (zvt_trans && zvt_trans->resp_frame == PINFO_FD_NUM(pinfo)) { - it = proto_tree_add_uint(apdu_tree, hf_zvt_resp_to, - NULL, 0, 0, zvt_trans->rqst_frame); - PROTO_ITEM_SET_GENERATED(it); - } + zvt_trans = (zvt_transaction_t *)wmem_tree_lookup32_le( + transactions, PINFO_FD_NUM(pinfo)); + if (zvt_trans && zvt_trans->resp_frame==0) { + /* there's a pending request, this packet is the response */ + zvt_trans->resp_frame = PINFO_FD_NUM(pinfo); } + if (zvt_trans && zvt_trans->resp_frame == PINFO_FD_NUM(pinfo)) { + it = proto_tree_add_uint(apdu_tree, hf_zvt_resp_to, + NULL, 0, 0, zvt_trans->rqst_frame); + PROTO_ITEM_SET_GENERATED(it); + } } else { ctrl = tvb_get_ntohs(tvb, offset); @@ -539,15 +535,12 @@ dissect_zvt_apdu(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tre } } else { - /* XXX - can this ever be NULL? */ - if (transactions) { - zvt_trans = wmem_new(wmem_file_scope(), zvt_transaction_t); - zvt_trans->rqst_frame = PINFO_FD_NUM(pinfo); - zvt_trans->resp_frame = 0; - zvt_trans->ctrl = ctrl; - wmem_tree_insert32(transactions, - zvt_trans->rqst_frame, (void *)zvt_trans); - } + zvt_trans = wmem_new(wmem_file_scope(), zvt_transaction_t); + zvt_trans->rqst_frame = PINFO_FD_NUM(pinfo); + zvt_trans->resp_frame = 0; + zvt_trans->ctrl = ctrl; + wmem_tree_insert32(transactions, + zvt_trans->rqst_frame, (void *)zvt_trans); } }