diff options
author | Pascal Quantin <pascal.quantin@gmail.com> | 2018-09-05 13:20:43 +0200 |
---|---|---|
committer | Pascal Quantin <pascal.quantin@gmail.com> | 2018-09-05 20:45:25 +0000 |
commit | 560a185e531d33be482895d561cb81cdb7ef6193 (patch) | |
tree | 16f948aa318bb2ba0955ebf13fd3da9057a4d7a6 | |
parent | 88204f975d82a7093dba016118bc33872f4c6e5f (diff) | |
download | wireshark-560a185e531d33be482895d561cb81cdb7ef6193.tar.gz wireshark-560a185e531d33be482895d561cb81cdb7ef6193.tar.bz2 wireshark-560a185e531d33be482895d561cb81cdb7ef6193.zip |
tvbuff_subset.c: handle a reported_length set to -1 in tvb_new_subset_length()
According to tvbuff.h, tvb_new_subset_length() should behave like
tvb_new_subet_caplen(). Let's do so.
Bug: 15112
Change-Id: I3f05ff45246ac0d05e9bc7bd069ec864da1afae6
Reviewed-on: https://code.wireshark.org/review/29426
Reviewed-by: Pascal Quantin <pascal.quantin@gmail.com>
Petri-Dish: Pascal Quantin <pascal.quantin@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
(cherry picked from commit b40beb9edfc5c09bb2374e2382871a7fc8825858)
Conflicts:
epan/tvbuff_subset.c
Reviewed-on: https://code.wireshark.org/review/29439
(cherry picked from commit 2c91551f3143489d80f084fcfe96620b7dba87d8)
Reviewed-on: https://code.wireshark.org/review/29441
-rw-r--r-- | epan/tvbuff_subset.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/epan/tvbuff_subset.c b/epan/tvbuff_subset.c index b463e46b0f..fd7aabb0c9 100644 --- a/epan/tvbuff_subset.c +++ b/epan/tvbuff_subset.c @@ -170,27 +170,33 @@ tvbuff_t * tvb_new_subset_length(tvbuff_t *backing, const gint backing_offset, const gint backing_length) { gint captured_length; + gint actual_backing_length; tvbuff_t *tvb; guint subset_tvb_offset; guint subset_tvb_length; DISSECTOR_ASSERT(backing && backing->initialized); - THROW_ON(backing_length < 0, ReportedBoundsError); + THROW_ON(backing_length < -1, ReportedBoundsError); + + if (backing_length == -1) + actual_backing_length = backing->reported_length; + else + actual_backing_length = backing_length; /* * Give the next dissector only captured_length bytes. */ captured_length = tvb_captured_length_remaining(backing, backing_offset); THROW_ON(captured_length < 0, BoundsError); - if (captured_length > backing_length) - captured_length = backing_length; + if (captured_length > actual_backing_length) + captured_length = actual_backing_length; tvb_check_offset_length(backing, backing_offset, captured_length, &subset_tvb_offset, &subset_tvb_length); - tvb = tvb_new_with_subset(backing, backing_length, + tvb = tvb_new_with_subset(backing, actual_backing_length, subset_tvb_offset, subset_tvb_length); tvb_add_to_chain(backing, tvb); |