Commit graph

617 commits

Author SHA1 Message Date
Anders Broman
39515def5f Increase PROTO_PRE_ALLOC_HF_FIELDS_MEM
svn path=/trunk/; revision=53009
2013-10-31 21:26:27 +00:00
Anders Broman
1e6927dbb3 Fix proto.c:4498: warning: 'compare_filter_name' defined but not used
svn path=/trunk/; revision=52975
2013-10-29 23:18:26 +00:00
Anders Broman
c864a20398 Optimize proto_get_id_by_filter_name() by using the existing hastable for proto_filter_names.
svn path=/trunk/; revision=52972
2013-10-29 22:17:18 +00:00
Jeff Morriss
de0fda9436 Revert r52905 and r52908: they're causing plenty of fuzz failures.
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9323 is tracking the fix.

svn path=/trunk/; revision=52966
2013-10-29 21:18:22 +00:00
Jeff Morriss
9259176f87 As pointed by Evan: don't leak memory when the string pointer is NULL.
svn path=/trunk/; revision=52908
2013-10-27 22:40:55 +00:00
Jeff Morriss
8e2f00bf3d Fix https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9323 :
Actually handle non-NULL-terminated FT_STRINGs properly.

svn path=/trunk/; revision=52905
2013-10-27 21:56:58 +00:00
Evan Huus
5b9ec08eae Optimization: in test_length there's no need to validate that the count value
for FT_UINT_STRINGs and FT_UINT_BYTEs is still in the TVB. Any infinite loop
that adds a counted field ought to be extracting the length for its own offset
anyways, in which case it will overflow on the next iteration and won't actually
loop forever.

svn path=/trunk/; revision=52766
2013-10-22 16:02:13 +00:00
Jakub Zawadzki
bad81b517f Reintroduce back epan_dissect_reset(), proto_tree_reset()
This time it makes more sense, cause for each dissection we need two wmem allocators.
Reseting wmem allocator is much faster than destroy & create.

svn path=/trunk/; revision=52706
2013-10-20 10:21:25 +00:00
Jakub Zawadzki
336befd903 Remove allocation stem from PROTO_NODE_NEW() macro.
Tree root-node will be allocated using g_slice()

svn path=/trunk/; revision=52704
2013-10-20 10:03:32 +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
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
c2b2d204db Redo r52569 in a way that doesn't break the GUI. Add a mem_pool member to
tree_data and reference it directly when allocating/freeing tree items. This
lets us keep multiple around when we need them, and still lets us use
wmem_free_all for a major speedup. It also, coincidentally, lets us get rid of
the annoying fi_tmp hack that was needed before, since that element gets swept
up in the free_all with everything else.

Keep one pool cached to avoid creating/destroying a pool for each packet,
another minor performance win.

The various changes in approach seem to balance out pretty much exactly, this
still gives ~11% over pre-52569.

svn path=/trunk/; revision=52573
2013-10-12 21:01:17 +00:00
Evan Huus
2e1497b532 Revert r52569, it breaks the GUI since that sometimes has multiple trees active
at once.

svn path=/trunk/; revision=52572
2013-10-12 18:14:19 +00:00
Evan Huus
540e9c745d Use wmem_free_all on the tree pool rather than freeing each node, label and
field_info separately. We still have to walk the tree in order to free certain
fvalues, but that's not a big deal. Another ~11% speed-up running "tshark -nVr"
on a large capture.

svn path=/trunk/; revision=52569
2013-10-12 17:57:51 +00:00
Evan Huus
d19a20746b Use a wmem block allocator to allocate field_infos, proto_nodes and item_labels.
Even without making use of free_all (which should be possible) this still
results in ~8% speedup running "tshark -nVr" on a large file in my tests.

svn path=/trunk/; revision=52568
2013-10-12 17:32:41 +00:00
Michael Mann
9ccefb0ecd Prefix all "Wireshark application specific" display filters with a "_ws." to distinguish them from dissector filters.
This was committed now to get it into the 1.11 release so users can start getting used to the changed filter names.

svn path=/trunk/; revision=52462
2013-10-09 12:56:19 +00:00
Michael Mann
ee208c8dcc Add support for RELATIVE-OID ASN.1 type. Bug 9192 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9192)
From Ed Beroset.

svn path=/trunk/; revision=52393
2013-10-06 02:31:10 +00:00
Michael Mann
a891f3e70b Make expert items used in "low level" proto functions filterable (and ensure they are called even with a NULL tree). I don't really like the Type Length Mismatch "protocol", but it doesn't seem that much different than the exception "protocols".
svn path=/trunk/; revision=52341
2013-10-03 01:54:02 +00:00
Evan Huus
ccbb52b436 Add a dissector assert to _set_bytes like the one in _set_oid, noticed while
debugging https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9214

svn path=/trunk/; revision=52327
2013-10-01 22:50:29 +00:00
Evan Huus
f1ba7e1095 The pointer into proto_tree_add_oid can be NULL if the length is 0. Exposed
because wmem_alloc(pool, 0) returns NULL (like pretty much every other
malloc-style function) where ep_ or se_ alloc did not.

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

svn path=/trunk/; revision=52187
2013-09-23 12:09:20 +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
Bill Meier
3bb06ab6a5 Fix proto_registrar_dump_protocols() bug introduced by the
implementation of BASE_VAL64_STRING value_strings.

Fixes 'tshark -G values' crash.

svn path=/trunk/; revision=52121
2013-09-17 18:33:03 +00:00
Guy Harris
aa8fbf09d2 The secs field of an nstime_t is a time_t, so cast to that.
svn path=/trunk/; revision=51981
2013-09-12 20:31:31 +00:00
Jörg Mayer
934cc4526d Make proto.c compile on my system (linux, 32 bit)
[-Werror,-Wshorten-64-to-32]
                                time_stamp.secs = (todsecs  / 1000000) - TOD_BASETIME;
                                                ~ ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~
/home/jmayer/work/wireshark/svn/trunk/epan/proto.c:1613:44: error: implicit conversion
      loses integer precision: 'unsigned long long' to 'time_t' (aka 'long')
      [-Werror,-Wshorten-64-to-32]
                                time_stamp.secs = (todsecs  / 1000000) - TOD_BASETIME;
                                                ~ ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~

svn path=/trunk/; revision=51978
2013-09-12 20:07:48 +00:00
Evan Huus
3d5ed04f60 Add casts to fix mac buildbots.
svn path=/trunk/; revision=51975
2013-09-12 17:17:42 +00:00
Evan Huus
f8693e35e0 From RobiOneKenobi via https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9072
Add support for Time-of-Day timestamp format from z/OS.

svn path=/trunk/; revision=51974
2013-09-12 16:56:37 +00:00
Michael Mann
1b009df749 Couldn't quite figure out how to make the expert items in proto.c and the LUA API filterable (suggestions welcome!), but I wanted to start forcing dissectors to use the filterable expert API (nothing like compile errors to force change!). I created expert_add_info_format_internal (original expert_add_info_format) and used it as a placeholder for proto.c/LUA API until a solution is created. The "new" expert_add_info_format will be the "old" expert_add_info_format_text, and I'll slowly do the search/replace.
For those with dissectors outside the source tree, please see tools/convert_expert_add_info_format.pl for help with the conversion.  Please do not use expert_add_info_format_internal, as it's support time will be very short lived.

svn path=/trunk/; revision=51844
2013-09-08 19:32:10 +00:00
Evan Huus
304bbabbbe From Jiri Engelthaler via
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9055

Add support for bitmask set for signed integer types.

svn path=/trunk/; revision=51522
2013-08-26 16:23:55 +00:00
Jakub Zawadzki
850f80fdc1 proto: simplify proto_tree_add_pi() remove out pointer to field_info *
field_info can be already get using PNODE_FINFO(return_value)

svn path=/trunk/; revision=51479
2013-08-22 21:20:50 +00:00
Jakub Zawadzki
4e870dd240 Fix few concept of new api tree:
- (for now) keep ABI, restore prototype of old proto_tree_add_item, add new proto_tree_add_item_new
- add few helpers for boolean, time, string which will do ->id
- don't use HFI_INIT directly, use it by another macro (MSVC has very small limit for section name)

svn path=/trunk/; revision=51401
2013-08-17 07:16:12 +00:00
Jakub Zawadzki
9d79b3233a Introduce new proto_tree API required for hf_ variables removal.
svn path=/trunk/; revision=51396
2013-08-16 21:21:52 +00:00
Jakub Zawadzki
97bddef1a2 Try to fix compilation under MSVC
__builtin_ctz() with bitmask == 0 is UB, so only do g_assert there.

svn path=/trunk/; revision=51176
2013-08-06 21:06:56 +00:00
Jakub Zawadzki
9cfac1227d Replace hfinfo pointer to same_name_prev, with same_name_prev_id.
svn path=/trunk/; revision=51175
2013-08-06 20:53:47 +00:00
Jakub Zawadzki
72ea2f9c9c Remove hfinfo->bitshift member, add hfinfo_bitshift() to get it.
svn path=/trunk/; revision=51174
2013-08-06 20:10:59 +00:00
Jakub Zawadzki
93f56d8a77 Optimize wrs_count_bitshift()
- Use __builtin_ctz for GCC/clang
- Do multiply and lookup on other platforms

svn path=/trunk/; revision=51173
2013-08-06 19:53:54 +00:00
Michael Mann
81f3faf1e8 Completely remove support for proto_item_set_expert_flags.
svn path=/trunk/; revision=51144
2013-08-05 02:25:45 +00:00
Jakub Zawadzki
430bd9eacc Optimize marking label as truncated in proto_tree_set_representation_*()
svn path=/trunk/; revision=51036
2013-07-30 20:02:24 +00:00
Martin Kaiser
3b92f760ed add a NULL check to report_type_length_mismatch()
this might be called via proto_tree_add_item() with tree==NULL
which results in a crash

svn path=/trunk/; revision=51020
2013-07-29 21:10:13 +00:00
Evan Huus
dbabc55955 Much simpler (and possibly faster) fix for the 64-bit value string label issue.
svn path=/trunk/; revision=50983
2013-07-28 20:05:04 +00:00
Evan Huus
4e5ac2989c As caught by Stig: 64-bit value strings could print the field name twice.
Don't do that.

svn path=/trunk/; revision=50982
2013-07-28 19:56:23 +00:00
Jakub Zawadzki
5b15390b3a Store protocol fields in single linked list, saves about 1 MB of memory.
svn path=/trunk/; revision=50967
2013-07-28 10:47:31 +00:00
Michael Mann
f3dac73d38 Fix compile error that resulted from whitespace cleanup.
svn path=/trunk/; revision=50963
2013-07-28 00:11:30 +00:00
Michael Mann
a87f47c02c Make many items filterable for Vines dissectors.
Add support for FT_VINES type.

svn path=/trunk/; revision=50962
2013-07-28 00:07:49 +00:00
Jakub Zawadzki
0d414ac0fd make some variables static
svn path=/trunk/; revision=50952
2013-07-27 20:57:58 +00:00
Evan Huus
5ede3bcde0 Follow-up to r50935: add support for 64-bit value strings in more places that
need it, I think this is all of them.

svn path=/trunk/; revision=50941
2013-07-26 23:51:00 +00:00
Evan Huus
c0cac8611e Squelch MSVC warnings. It doesn't know that DISSECTOR_ASSERT_NOT_REACHED doesn't
return.

svn path=/trunk/; revision=50939
2013-07-26 22:52:34 +00:00
Evan Huus
6e3a30794e Add 64-bit value strings and the appropriate tooling (including yet another
overloaded use of the DISPLAY field). Thanks to Jakub for pointing out I'd done
this wrong the first time (months ago in r49357).

Fixes severity display for collectd protocol, originally filed at:
https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8472

svn path=/trunk/; revision=50935
2013-07-26 21:51:39 +00:00
Jeff Morriss
d58c13c363 As pointed out in https://www.wireshark.org/lists/wireshark-dev/201307/msg00153.html :
The fix for https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=3290 needs
to allow for giving a length of -1 for FT_STRINGZ's.

This is another fix for https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=8960
(in addition to r50836).  There's no point in reverting that revision, though,
since there was no need to use a length of -1 in that case.

svn path=/trunk/; revision=50892
2013-07-25 18:37:18 +00:00