Commit graph

279 commits

Author SHA1 Message Date
Jakub Zawadzki
f207c70075 I have added tvb_get_bits_buf() in r37217, nobody is using it, remove.
svn path=/trunk/; revision=53183
2013-11-09 10:08:58 +00:00
Jakub Zawadzki
c86d38af23 Remove old (5 yrs) #if 0 code (from r25028).
svn path=/trunk/; revision=53182
2013-11-09 10:02:39 +00:00
Jakub Zawadzki
c011e54567 Fix buildbot, typo:
tvbuff.c:1258: warning: passing argument 2 of '__builtin___memcpy_chk' makes pointer from integer without a cast
	tvbuff.c:1258: warning: passing argument 2 of '__inline_memcpy_chk' makes pointer from integer without a cast

svn path=/trunk/; revision=53117
2013-11-06 21:15:46 +00:00
Jakub Zawadzki
67f69e99e8 tvb: optimize tvb_get_*guid()
we already have valid ptr from ensure_contiguous() so use it to fill structure.

svn path=/trunk/; revision=53113
2013-11-06 20:34:27 +00:00
Jakub Zawadzki
b4be2fa489 tvbuff: use always ops->tvb_size
svn path=/trunk/; revision=53112
2013-11-06 20:22:28 +00:00
Jakub Zawadzki
d54b3a74f6 tvbuff: cleanup, remove dead code.
ensure_contiguous() will throw exception but won't return NULL.

svn path=/trunk/; revision=53111
2013-11-06 19:03:14 +00:00
Evan Huus
7aee8b2dcf Optimize tvb_ensure_bytes_exist through manual inlining and removal of redundant
checks and computations. Should contain no behavioural changes at *all*, I hope.

svn path=/trunk/; revision=52768
2013-10-22 16:29:10 +00:00
Anders Broman
1684ac969b Revert 52695.
svn path=/trunk/; revision=52763
2013-10-22 14:54:54 +00:00
Anders Broman
09e32f5fb8 Minor optimizations.
svn path=/trunk/; revision=52695
2013-10-19 20:16:00 +00:00
Evan Huus
cbe8af0a8b Revert the optimization in r52578. As Jakub predicted, it caused at least one
infinite loop to pop up. We're just going to have to eat the performance hit.
(https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9282)

svn path=/trunk/; revision=52660
2013-10-17 12:24:25 +00:00
Evan Huus
934bfff003 Temporarily revert r52651 it caused a regression when trying to tvb_memcpy from
a negative offset (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9277)

svn path=/trunk/; revision=52658
2013-10-17 02:43:21 +00:00
Anders Broman
4223c93c37 Create an internal _tvb_memcpy() without the sanity checks to be caled from tvb internal routines with sanity checks to avoid duplicated checks.
svn path=/trunk/; revision=52651
2013-10-16 20:05:59 +00:00
Evan Huus
2e405d7261 Replace XXX with explanation based on discussion with Jakub on -dev.
svn path=/trunk/; revision=52606
2013-10-14 20:35:56 +00:00
Evan Huus
efdbb598b8 So a while back Jeff added some code to check that the offset+length passed to
proto_tree_add_item was valid *before* we short-circuited based on a NULL tree.
This was good in that it removed a common source of really-long-loop bugs. It
was less good in that it cost us about 8% in speed when doing a tree-less
dissection, but we decided the tradeoff was worth it.

After Anders' recent mail to -dev about performance, I started thinking about
how to optimize this. It occurred to me that the vast majority of the logic
involved in the check was dealing with the length value - fetching the actual
length if it was a counted string, calculating the length if it was -1, adding
the length to the offset in a way that was free from overflows, etc.

All of this is (theoretically) unnecessary - simply checking the offset without
worrying about the length will still catch the very-long-loops, since it is the
offset that increases in each iteration, not the length.

All that to justify:
- implement tvb_ensure_offset_exists which throws an exception if the offset is
  not within the tvb
- use it instead of all the complicated other logic in the pre-short-circuit
  step of proto_tree_add_item and friends

This gives us back about 3/4 of the performance we lost in the original patch.
We're still ~2% slower than without any check, but this is the best I can think
of right now.

svn path=/trunk/; revision=52578
2013-10-13 04:54:14 +00:00
Evan Huus
f65ab9499b Order our conditionals to take advantage of the fact that we know tvb->length <=
tvb->reported_length. Small performance win on the hot path, and a bit easier to
read.

svn path=/trunk/; revision=52577
2013-10-13 00:13:20 +00:00
Evan Huus
a11b04b5d8 Tweak/simplify some tvbuff length check functions slightly. In my benchmarks of
dissecting without tree, they are costly because they now happen for every
proto_tree_add_item call even if tree is NULL.

svn path=/trunk/; revision=52575
2013-10-12 23:41:55 +00:00
Chris Maynard
b610734a12 If the offset is out of bounds, have tvb_length_remaining() and tvb_reported_length_remaining() return 0 instead of -1. This should provide a better long-term fix for bugs/problems such as seen in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9263. In the long-run, if we like this behavior, we can change the return value to a guint as well. Let's let it simmer for awhile first ...
svn path=/trunk/; revision=52571
2013-10-12 18:13:26 +00:00
Pascal Quantin
102c452bcb More emem -> wmem conversion:
- tvb_get_g_stringz()/tvb_get_ephemeral_stringz()/tvb_get_seasonal_stringz() -> tvb_get_stringz()
- tvb_get_g_stringz_enc()/tvb_get_ephemeral_stringz_enc() -> tvb_get_stringz_enc()
- tvb_get_ephemeral_unicode_stringz() -> tvb_get_unicode_stringz()
- tvb_bcd_dig_to_ep_str() -> tvb_bcd_dig_to_wmem_packet_str()
- update docs accordingly

svn path=/trunk/; revision=52180
2013-09-22 20:04:35 +00:00
Pascal Quantin
a0c53ffaa1 emem -> wmem conversion:
- ep_tvb_get_bits() -> wmem_packet_tvb_get_bits()
- tvb_g_memdup()/ep_tvb_memdup() -> tvb_memdup()
- tvb_fake_unicode()/tvb_get_ephemeral_faked_unicode() -> tvb_get_faked_unicode()
- tvb_get_g_string()/tvb_get_ephemeral_string()/tvb_get_seasonal_string() -> tvb_get_string()
- tvb_get_g_unicode_string()/tvb_get_ephemeral_unicode_string() -> tvb_get_unicode_string()
- tvb_get_ephemeral_string_enc() -> tvb_get_string_enc()
- update docs accordingly

svn path=/trunk/; revision=52172
2013-09-22 15:50:55 +00:00
Evan Huus
6df83e8078 Add _g_ to the names of functions that allocate glib memory. This is a bit more
explicit, and frees up the "generic" names (like tvb_memdup) for new signatures
that take the appropriate wmem pool.

Majority of the conversion done with sed.

svn path=/trunk/; revision=52164
2013-09-21 17:04:41 +00:00
Evan Huus
9fd46c37a8 - no need for a doubly-linked list of TVBs, single is simpler
- support merging chains in tvb_add_to_chain
- when we have an old reassembled TVB, just merge the chains rather than
  freeing it (we may still need it as it may already be a data source)
- modelines

Fixes https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9027

#BACKPORT, but it's gonna be messy...

svn path=/trunk/; revision=51825
2013-09-07 18:20:52 +00:00
Jakub Zawadzki
c27481b03c Fix for bug #9034: Composite TVBs aren't supported by tvb_find_guint8()
Add generic tvb_find_guint8, tvb_pbrk_guint8

svn path=/trunk/; revision=51445
2013-08-20 19:56:57 +00:00
Evan Huus
9fdf6f28e4 Split some asserts so it is more clear what the problem is when they are
triggered.

svn path=/trunk/; revision=51293
2013-08-11 13:44:11 +00:00
Jakub Zawadzki
b67492bbc0 Cleanup tvb
- make tvb_ops->tvb_size a gsize field, not function call
- remove not needed forward declaration / forward line

svn path=/trunk/; revision=51141
2013-08-04 22:02:42 +00:00
Jeff Morriss
2df54da6e2 Move a bunch of the crypt modules and pint.h into wsutil.
This means wsutil now links against libcrypt.

Protect a bunch of the crypt header files from multiple inclusion.

svn path=/trunk/; revision=51100
2013-08-01 23:34:47 +00:00
Jakub Zawadzki
10e40c1638 tvb: check_offset_length() can calculate remaining length, use it.
svn path=/trunk/; revision=51081
2013-08-01 16:54:22 +00:00
Jakub Zawadzki
9d519b5659 Move composite tvbuff to seperate file (with some subtle changes).
svn path=/trunk/; revision=51071
2013-07-31 19:58:13 +00:00
Jakub Zawadzki
761b763eae Move tvb_new_child_real_data() to tvbuff_real.c with some cleanup
svn path=/trunk/; revision=50843
2013-07-23 17:23:51 +00:00
Jakub Zawadzki
fec836d697 Fix bug #8936: Fuzz failure: attempt to allocate -1 bytes from packet-bacapp.c and/or tvb_generic_clone_offset_len()
Revert r50556: Add new function: validate_offset() which checks if offset is within bounds of tvb.

svn path=/trunk/; revision=50633
2013-07-15 18:32:11 +00:00
Jakub Zawadzki
c766e78cfa Rewrite reassemble API to use TVBs instead of raw data.
(it seems to be working for TCP ^^)

svn path=/trunk/; revision=50580
2013-07-14 14:42:05 +00:00
Jakub Zawadzki
0d85b75305 Move tvb real and subset implementations to seperate files.
svn path=/trunk/; revision=50569
2013-07-14 07:42:19 +00:00
Jakub Zawadzki
ef93945811 Add support for cloning TVBs, move tvb_new() prototype to wtap-int.h
svn path=/trunk/; revision=50558
2013-07-13 17:53:33 +00:00
Jakub Zawadzki
af61f188e0 Add new function: validate_offset() which checks if offset is within bounds of tvb.
svn path=/trunk/; revision=50556
2013-07-13 14:51:25 +00:00
Jakub Zawadzki
d5450ff925 Remove compute_offset_length()
We either want to calculate only offset (compute_offset()), or
offset and remaining length (compute_offset_and_remaining())

Move old generic code to check_offset_length_no_exception())

svn path=/trunk/; revision=50551
2013-07-13 10:28:19 +00:00
Jakub Zawadzki
614e45a25a Call check_offset_length_no_exception() in tvb_bytes_exist(), fix possible integer overflow
svn path=/trunk/; revision=50550
2013-07-13 09:48:55 +00:00
Jakub Zawadzki
cae2ce3b05 TVB: rewrite compute_offset_length(), check_offset_length_no_exception() to return exception number instead of FALSE, and 0 instead of TRUE
+ if there's overflow in check_offset_length_no_exception() just set exception, don't clamp end_offset (it could be an issue for 4GB tvbs :>)


svn path=/trunk/; revision=50549
2013-07-13 09:17:32 +00:00
Jakub Zawadzki
d2b93398f9 fix subset tvb: we want to do operation on backing tvb on position: abs_offset + subset_offset, abs_offset - subset_offset makes no sense.
Right now it doesn't really matter, cause tvb subsets always have real_data.

Without fix, and with small modification in ensure_contigous_no_expcetion() to first check for ->tvb_get_ptr() and later real_data
epan doesn't work and it flood console with warnings like:
** (process): WARNING **: Dissector bug, protocol IPv4, in packet 3823: tvbuff.c:976: failed assertion "exception > 0"


svn path=/trunk/; revision=50537
2013-07-12 17:53:51 +00:00
Jakub Zawadzki
356a4613c7 Restore old composite_memcpy() prototype. Remove it from ops.
svn path=/trunk/; revision=50498
2013-07-11 05:51:19 +00:00
Jakub Zawadzki
ce81449ed9 packet dissection now takes pointer to tvb instead of guint8 data
implement frame_tvbuff, right now almost a copy of 'real' tvb.

svn path=/trunk/; revision=50497
2013-07-11 05:47:02 +00:00
Jakub Zawadzki
19d2d0dc76 tvbuff: try to fix compilation problems for C++-like compilers.
svn path=/trunk/; revision=50496
2013-07-11 04:35:12 +00:00
Jakub Zawadzki
338f1c9654 tvbuff: remove ->tvb_init() from ops
->tvb_init() knows nothing about new tvb and can only do some kind of bzero()
it's much better if we initialize object after tvb_new() [which anyway must be done]

+ try to fix OSX build.

svn path=/trunk/; revision=50490
2013-07-10 19:25:49 +00:00
Jakub Zawadzki
d7175365ab tvbuff: allow tvb-implementations using their own structure (it's fine as long as first member of struct is tvbuff)
Move some stuff outside tvbuff struct.

svn path=/trunk/; revision=50489
2013-07-10 19:08:02 +00:00
Jakub Zawadzki
b4d8a3727f Fix previous commit. Devel env with -w in CFLAGS is not so good idea...
svn path=/trunk/; revision=50487
2013-07-10 18:25:24 +00:00
Jakub Zawadzki
f3ed13c22e tvbuff: replace type with operation vtable
It's begin of work to allow adding new tvbuff types (think: wtap_tvbuff, base64_tvbuff).

svn path=/trunk/; revision=50486
2013-07-10 18:14:15 +00:00
Jakub Zawadzki
83322789d1 tvbuff: use ep_strbuf_append_unichar()
svn path=/trunk/; revision=50477
2013-07-09 23:10:04 +00:00
Jakub Zawadzki
398f94dd24 tvb subset: move setting tvb->ds_tvb to tvb_new_with_subset()
svn path=/trunk/; revision=50464
2013-07-09 16:22:53 +00:00
Chris Maynard
9a394ddfa0 Get rid of variable, 'end'.
svn path=/trunk/; revision=50285
2013-07-01 06:03:35 +00:00
Chris Maynard
8976968f4c There are a few dissectors that pass the return value of tvb_length_remaining() as the size argument to the tvb_format_*() functions. Try to do something sane if that value happens to be -1 (or negative in general). One such example is packet-bthfp.c, as found and reported by Coverity in CID 1035325 (Improper use of negative value).
Note: There are other ways to handle this of course, but this fix is suitable for backporting to both 1.10 and 1.8, as it does not break binary compatibility.  Is there a better way to fix this though?  For now, schedule this for backport.

svn path=/trunk/; revision=50282
2013-07-01 05:23:17 +00:00
Jeff Morriss
86744b65da As suggested by Jakub: don't ep_alloc buffers for TVBs, use g_malloc()'d
memory with tvb-free-callback.

Fixes one of the "read after free" warnings from Valgrind reported in
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8197 and the one reported
in https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8653

svn path=/trunk/; revision=49379
2013-05-17 14:38:36 +00:00
Guy Harris
09e0d5b406 When creating a subset tvbuff, inherit the flags from the tvbuff of
which we're making a subset, so that if the parent tvbuff is marked as a
fragment, the child tvbuff will be marked as one as well.

svn path=/trunk/; revision=48953
2013-04-21 17:38:57 +00:00