diff options
author | Martin Mathieson <martin.mathieson@keysight.com> | 2020-03-30 22:50:48 +0100 |
---|---|---|
committer | Martin Mathieson <martin.r.mathieson@googlemail.com> | 2020-03-31 08:25:06 +0000 |
commit | aacb52a31e07a2f5d554414a05358b8df8f79c87 (patch) | |
tree | 58fddf8fdba30b10b35255848af3ca07da6bf212 /epan/dissectors | |
parent | da04d89f1edc5fb2bd93e71901eb2aeb03c42cfc (diff) |
TCP: Don't scale calculated window size using preference if no scaling signalled
Bug: 15841
Bug: 15959
Change-Id: If548b0a12f11c50f72e0957746525ed0fa591f15
Reviewed-on: https://code.wireshark.org/review/36637
Petri-Dish: Martin Mathieson <martin.r.mathieson@googlemail.com>
Reviewed-by: Peter Wu <peter@lekensteyn.nl>
Reviewed-by: Martin Mathieson <martin.r.mathieson@googlemail.com>
Diffstat (limited to 'epan/dissectors')
-rw-r--r-- | epan/dissectors/packet-tcp.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/epan/dissectors/packet-tcp.c b/epan/dissectors/packet-tcp.c index 08460a2df8..9d19412403 100644 --- a/epan/dissectors/packet-tcp.c +++ b/epan/dissectors/packet-tcp.c @@ -6319,8 +6319,8 @@ dissect_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) if (tcpd && (tcpd->fwd->win_scale>=0)) { (tcph->th_win)<<=tcpd->fwd->win_scale; } - else { - /* Don't have it stored, so use preference setting instead! */ + else if (tcpd && (tcpd->fwd->win_scale == -1)) { + /* i.e. Unknown, but wasn't signalled with no scaling, so use preference setting instead! */ if (tcp_default_window_scaling>=0) { (tcph->th_win)<<=tcp_default_window_scaling; } @@ -6447,6 +6447,7 @@ dissect_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) switch (tcpd->fwd->win_scale) { case -1: + /* Unknown */ { gint16 win_scale = tcpd->fwd->win_scale; gboolean override_with_pref = FALSE; @@ -6466,11 +6467,13 @@ dissect_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) break; case -2: + /* No window scaling used */ scaled_pi = proto_tree_add_int_format_value(tcp_tree, hf_tcp_window_size_scalefactor, tvb, offset + 14, 2, tcpd->fwd->win_scale, "%d (no window scaling used)", tcpd->fwd->win_scale); proto_item_set_generated(scaled_pi); break; default: + /* Scaling from signalled value */ scaled_pi = proto_tree_add_int_format_value(tcp_tree, hf_tcp_window_size_scalefactor, tvb, offset + 14, 2, 1<<tcpd->fwd->win_scale, "%d", 1<<tcpd->fwd->win_scale); proto_item_set_generated(scaled_pi); } |