problem med buffer i C
nu har jeg snart rykket alt håret af, har prøvet at fikse det her i snart 2 dage...i C har jeg koden :
if (keyflag)
{
char * alldata = sp; // contains all encryptet data
const u_char * buffer; // will contain unencryptet part of the data (only the part that needs unencryptet)
static int currentloc = 0;
static int newloc = 0;
unsigned short int * strsize = 0;
unsigned short int * decsize = 0;
log(1, "[Raw data follows]<br>\n");
packetlog(length, (const unsigned char*)sp);
while(currentloc < length) // aslong there is still data left in buffer we do this.
{
newloc = currentloc; // get where we where last time in the alldata buffer
strsize = alldata[newloc];
buffer = (unsigned char *)calloc(strsize+4,sizeof(unsigned char)); // allocate memory to the buffer
if( buffer == NULL )
{
printf( "Insufficient memory available\n" );
break;
}
else
{
memcpy(buffer, (char*)&alldata[newloc], strsize); // copy xxxx byte from alldata to buffer
lineage_decode(lin_gsks, sport, (u_char *)&buffer[2], (strsize-2), &lin_keys.encodekey, &lin_keys.decodekey);
log(1, "[Decoded data for opcode 0x%.2x follows (size %i)]<br>\n", buffer[2], strsize-2);
packetlog(strsize-2, (const unsigned char*)&buffer[2]);
currentloc = newloc + strsize; // set next location in alldata to be decryptet
strsize = 0;
decsize = 0;
newloc = 0;
}
}
strsize = 0;
decsize = 0;
currentloc = 0;
newloc = 0;
}
den får en pakke ind i som feks ser sådan ud:
[18:35:04] [**START**] packet size=94 sport 2000
[18:35:04] [Raw data follows]
[ DATA ] (0x0000) 0A 00 D5 6A 41 36 DD 0C 15 00 1A 00 39 A5 36 70 ...jA6......9.6p
[ DATA ] (0x0010) 7F 8D 11 D4 6F 80 61 D4 FC 0E 94 43 1C C0 AC 13 ....o.a....C....
[ DATA ] (0x0020) 71 8F 17 AD 1A 00 78 C7 62 64 47 82 D9 41 F6 D3 q.....x.bdG..A..
[ DATA ] (0x0030) 0A 00 36 00 00 00 36 00 00 00 14 00 00 00 00 0F ..6...6.........
[ DATA ] (0x0040) B5 1C 2A C4 00 30 4F 1D 08 09 08 00 45 00 00 28 ..*..0O.....E..(
[ DATA ] (0x0050) 99 7F 40 00 80 06 4B BF C0 A8 00 02 3F 6E 15 79 ..@...K.....?n.y
den skulle så gerne køre pakken (det er mange pakker i en) ud en efter en efter størelsen [0A 00] = 10 bytes -> 10 bytes hen -> [1A 00] = 26, osvosv i gennem while løkken indtil pakken er kørt helt igennem..
men jeg ser 2 fejl her
fordi min output fil ser sådan her ud:
[18:35:04] [Decoded data for opcode 0x64 follows (size 6)]
[ DATA ] (0x0000) 64 03 00 25 27 23
18:35:04] [Decoded data for opcode 0x23 follows (size 22)]
[ DATA ] (0x0000) 23 58 6F 52 00 00 04 00 F6 21 85 00 43 00 02 12
[ DATA ] (0x0010) 12 12 08 0A 09 0C
<--- her får jeg en memory allocation failed ting (for næste pakke)
[18:35:04] [** END **] Lineage packet
fejlen ser man nemt, 0x64 follows (size 6)], pakkens størelse er [0A 00] som man kan se i den raw pakke, dvs 10 bytes, men skal ikke røre størelse byts'ne, så size = size - 2; = 8 bytes
hvordan dælen kan den blive 6 bytes ?? giver ingen mening, og hvorfor får jeg de buffer allocation failed, low memory ting ?
takker :)