wireshark-dev-bounces@xxxxxxxxxxxxx wrote on 07/12/2006 14:21:24:
> Hi,
> You should try to see in packet-giop.c what happens after the output of:
>   ServiceContextList
>     Sequence Length: 0
> 
> My guess is that a sequence length of zero isn't handled properly. I
> have little time to look at this currently...
> 
OK, I now know where it is going wrong, but I don't know the right way
to fix it.
In my packet-quentinv3.c file the code generated has a function
called start_dissecting. This gets called for every recognised
packet and is throwing a ReportedBoundsError exception.
It looks like this is because it is trying to add a new tree item
for a 0 length sequence, so it shouldn't really need to.
Following this through. The call tree that throws the exception is :-
start_dissecting ->
  proto_tree_add_item ->
    alloc_field_info ->
      get_hfi_and_length ->
In get_hfi_and_length the code that throws reads :-
                switch (hfinfo->type) {
                case FT_PROTOCOL:
                        /*
                         * We allow this to be zero-length - for
                         * example, an ONC RPC NULL procedure has
                         * neither arguments nor reply, so the
                         * payload for that protocol is empty.
                         *
                         * However, if the length is negative, the
                         * start offset is *past* the byte past the
                         * end of the tvbuff, so we throw an
                         * exception.
                         */
                        *length = tvb_length_remaining(tvb, start);
                        if (*length < 0) {
                                /*
                                 * Use "tvb_ensure_bytes_exist()"
                                 * to force the appropriate exception
                                 * to be thrown.
                                 */
                                tvb_ensure_bytes_exist(tvb, start, 0);
                        }
For the case where it throws *length = -1
I now need someone who undall this code to advise the best place to
fix it. I guess the dissector shouldn't add a tree item if there are
no arguments, but that requires changes to the python that generates
that file.
Thanks for any help
Andy Ling