Hi ,

 

We are using a 32 bit machine and dissector is working fine. The same
dissector when used in a 64 bit m/c is giving problems. I would like to
know how is it going to get affected in the change of environment,
because initially it did not even compile properly .While testing in a
64 bit machine the wireshark is getting crashed giving the following
error:

 

Inside unpack digits , length = 29 and offset is = 18

 

 

 

Program received signal SIGSEGV, Segmentation fault.

[Switching to Thread 182924546464 (LWP 1776)]

0x0000002a9b46afb7 in unpack_digits (tvb=0x10dfbd8, offset=18,
dgt=0x2a9b588e78) at packet-xxx.c:4488

4488                    digit_str[i] = dgt->out[octet & 0x0f]; 

(gdb) 

 

 

The code for unpack digits is as follows:

 

static char*

unpack_digits(tvbuff_t *tvb, int offset, dgt_set_t *dgt){

 

        int length, length_fake, offset_fake, counter=0;

        guint8 octet, num_of_digits_imsi;

        int i=0;

        char *digit_str;

 

        length = tvb_length(tvb);

        printf("\n\nInside unpack digits , length = %d and offset is =
%d\n\n",length,offset);

        if (length < offset)

                return "";

        digit_str = ep_alloc((length - offset)*2+1);

 

        offset_fake = offset-1;

        num_of_digits_imsi = tvb_get_guint8(tvb,offset_fake);

        if( (num_of_digits_imsi % 2) == 0 )

                        length_fake = num_of_digits_imsi / 2;

        else

                        length_fake = (num_of_digits_imsi+1)/2;

 

        printf("\noffset_fake = %d\tnum_of_digits_imsi = %d\tlength_fake
=  %d",offset_fake,num_of_digits_imsi,length_fake);

        while ( counter < length_fake ){

 

                octet = tvb_get_guint8(tvb,offset);

 

                digit_str[i] = dgt->out[octet & 0x0f];

                i++;

 

                /* unpack second value in byte */

                octet = octet >> 4;

 

                if (octet == 0x0f)      /* odd number bytes - hit filler
*/

                        break;

 

                digit_str[i] = dgt->out[octet & 0x0f];

                i++;

                offset++;

                counter++;

 

        }

        digit_str[i]= '\0';

        return digit_str;

}

 

 

Can anybody please help???

 

Regards,

Tarani 

 

 




The information contained in this electronic message and any attachments to 
this message are intended for the exclusive use of the addressee(s) and may 
contain proprietary, confidential or privileged information. If you are not the 
intended recipient, you should not disseminate, distribute or copy this e-mail. 
Please notify the sender immediately and destroy all copies of this message and 
any attachments. 

WARNING: Computer viruses can be transmitted via email. The recipient should 
check this email and any attachments for the presence of viruses. The company 
accepts no liability for any damage caused by any virus transmitted by this 
email.
 
www.wipro.com
_______________________________________________
Wireshark-dev mailing list
Wireshark-dev@wireshark.org
http://www.wireshark.org/mailman/listinfo/wireshark-dev

Reply via email to