[prev in list] [next in list] [prev in thread] [next in thread]
List: wireshark-dev
Subject: Re: [Wireshark-dev] FT_BYTES hf with len==0
From: Martin Kaiser <lists () kaiser ! cx>
Date: 2013-12-20 17:25:19
Message-ID: 20131220172519.GA4881 () reykholt ! kaiser ! cx
[Download RAW message or body]
Thus wrote Martin Kaiser (lists@kaiser.cx):
> > > 5392 label_fill(label_str, 0, hfinfo,
> > > 5393 (bytes) ? bytes_to_str(bytes, \
> > > fvalue_length(&fi->value)) : "<MISSING>"); 5394 break;
> > > It'd be good to make them consistent, allow empty bytes (+1 from me) or assert \
> > > in both place.
> > ok, I'll change this.
> done in r54290.
I've just found one more issue with empty FT_BYTES:
When I click on an empty FT_BYTES element in the tree and select Apply
as Filter / Selected, wireshark creates a filter expression
<filter name>==
that results in a syntax error.
This is created by construct_match_selected_string(), which calls
fvalue_to_string_repr() and uses the fvalue's string representation by
default.
One way to resolve this would be to change an empty FT_BYTES' string
representation from <nothing> to "" (as <filter name>=="" is a valid
filter expression). See the attached patch.
Is that ok or does it break someone else's code? Should I check for
FTREPR_DFILTER and modify the representation for empty FT_BYTES only in
this case?
["bytes_repr.patch" (text/x-diff)]
commit f7aeaec74abab8e11165ea742778d4875100cfac
Author: Martin Kaiser <martin@reykholt.kaiser.cx>
Date: Fri Dec 20 17:31:21 2013 +0100
change the string representation of an empty FT_BYTES fvalue to ""
this creates a correct filter expression for Apply as Filter / Selected, etc.
diff --git a/epan/ftypes/ftype-bytes.c b/epan/ftypes/ftype-bytes.c
index de7adac..5bcb20d 100644
--- a/epan/ftypes/ftype-bytes.c
+++ b/epan/ftypes/ftype-bytes.c
@@ -63,9 +63,8 @@ static int
bytes_repr_len(fvalue_t *fv, ftrepr_t rtype _U_)
{
if (fv->value.bytes->len == 0) {
- /* Empty array of bytes, so the representation
- * is an empty string. */
- return 0;
+ /* Empty array of bytes, the representation is two double quotes */
+ return 2;
} else {
/* 3 bytes for each byte of the byte "NN:" minus 1 byte
* as there's no trailing ":". */
@@ -143,6 +142,11 @@ bytes_to_repr(fvalue_t *fv, ftrepr_t rtype _U_, char *buf)
c = fv->value.bytes->data;
write_cursor = buf;
+ if (fv->value.bytes->len==0) {
+ sprintf(write_cursor, "\"\"");
+ return;
+ }
+
for (i = 0; i < fv->value.bytes->len; i++) {
if (i == 0) {
sprintf(write_cursor, "%02x", *c++);
___________________________________________________________________________
Sent via: Wireshark-dev mailing list <wireshark-dev@wireshark.org>
Archives: http://www.wireshark.org/lists/wireshark-dev
Unsubscribe: https://wireshark.org/mailman/options/wireshark-dev
mailto:wireshark-dev-request@wireshark.org?subject=unsubscribe
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic