diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2015-07-21 23:46:03 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2015-07-22 07:05:52 +0000 |
commit | 32d9a1d714d5d253428a5c3d5450e1d3316a9f16 (patch) | |
tree | ad725fe14107193d382f0a40344437a1e79a1b56 /ui/qt | |
parent | 83dc308f3681a28ee943e771e3b93117901ca231 (diff) |
Ensure to copy the (un)resolved (source|destination) address columns before freeing epan memory
Otherwise addresses like AT_STRINGZ using pinfo->pool are using an already freed memory block
Bug: 11387
Change-Id: I615d6bf202d57a949e75ba06a39f8d3e464def2f
Reviewed-on: https://code.wireshark.org/review/9744
Reviewed-by: Evan Huus <eapache@gmail.com>
Petri-Dish: Evan Huus <eapache@gmail.com>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Anders Broman <a.broman58@gmail.com>
Diffstat (limited to 'ui/qt')
-rw-r--r-- | ui/qt/packet_list_record.cpp | 34 |
1 files changed, 17 insertions, 17 deletions
diff --git a/ui/qt/packet_list_record.cpp b/ui/qt/packet_list_record.cpp index 9211f9b371..cd94014a25 100644 --- a/ui/qt/packet_list_record.cpp +++ b/ui/qt/packet_list_record.cpp @@ -197,6 +197,23 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) } switch (cinfo->col_fmt[column]) { + case COL_PROTOCOL: + case COL_INFO: + case COL_IF_DIR: + case COL_DCE_CALL: + case COL_8021Q_VLAN_ID: + case COL_EXPERT: + case COL_FREQ_CHAN: + if (cinfo->columns[column].col_data && cinfo->columns[column].col_data != cinfo->columns[column].col_buf) { + /* This is a constant string, so we don't have to copy it */ + // XXX - ui/gtk/packet_list_store.c uses G_MAXUSHORT. We don't do proper UTF8 + // truncation in either case. + int col_text_len = MIN(qstrlen(cinfo->col_data[column]) + 1, COL_MAX_INFO_LEN); + col_text_.append(QByteArray::fromRawData(cinfo->columns[column].col_data, col_text_len)); + break; + } + /* !! FALL-THROUGH!! */ + case COL_DEF_SRC: case COL_RES_SRC: /* COL_DEF_SRC is currently just like COL_RES_SRC */ case COL_UNRES_SRC: @@ -215,23 +232,6 @@ void PacketListRecord::cacheColumnStrings(column_info *cinfo) case COL_DEF_NET_DST: case COL_RES_NET_DST: case COL_UNRES_NET_DST: - case COL_PROTOCOL: - case COL_INFO: - case COL_IF_DIR: - case COL_DCE_CALL: - case COL_8021Q_VLAN_ID: - case COL_EXPERT: - case COL_FREQ_CHAN: - if (cinfo->columns[column].col_data && cinfo->columns[column].col_data != cinfo->columns[column].col_buf) { - /* This is a constant string, so we don't have to copy it */ - // XXX - ui/gtk/packet_list_store.c uses G_MAXUSHORT. We don't do proper UTF8 - // truncation in either case. - int col_text_len = MIN(qstrlen(cinfo->col_data[column]) + 1, COL_MAX_INFO_LEN); - col_text_.append(QByteArray::fromRawData(cinfo->columns[column].col_data, col_text_len)); - break; - } - /* !! FALL-THROUGH!! */ - default: if (!get_column_resolved(column) && cinfo->col_expr.col_expr_val[column]) { /* Use the unresolved value in col_expr_val */ |