aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors
diff options
context:
space:
mode:
authorMartin Mathieson <martin.mathieson@keysight.com>2020-03-30 22:50:48 +0100
committerMartin Mathieson <martin.r.mathieson@googlemail.com>2020-03-31 08:25:06 +0000
commitaacb52a31e07a2f5d554414a05358b8df8f79c87 (patch)
tree58fddf8fdba30b10b35255848af3ca07da6bf212 /epan/dissectors
parentda04d89f1edc5fb2bd93e71901eb2aeb03c42cfc (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.c7
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);
}