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???