Fix bug in BytesArrayTools reading

This commit is contained in:
Louis Royer 2020-02-03 14:33:58 +01:00
parent 859c9146d9
commit 460964bd6e
2 changed files with 17 additions and 12 deletions

View File

@ -243,28 +243,32 @@ public class ProtocolP2PDatagram {
this.hostR = hostR;
}
private int computeCheckSum(byte [] datagram){
private int computeCheckSum(byte [] datagram) throws SizeError {
int checksum = 0;
for (int i=CHECKSUM_POSITION+2; i<datagram.length; ++i){
for (int i=CHECKSUM_POSITION+2; i<CHECKSUM_POSITION+2+4+Payload.getPayloadSize(datagram); ++i){
checksum += BytesArrayTools.readInt16Bits(datagram,i);
checksum &= 0xffff;
}
return checksum ^ 0xffff;
}
private void setCheckSum(byte [] datagram) throws InternalError{
int checksum = computeCheckSum(datagram);
try{
private void setCheckSum(byte [] datagram) throws InternalError {
try {
int checksum = computeCheckSum(datagram);
BytesArrayTools.write16Bits(datagram,CHECKSUM_POSITION,checksum);
} catch (SizeError e) {
throw new InternalError();
}
}
private void checkCheckSum(byte [] datagram) throws TransmissionError{
int checksum = BytesArrayTools.readInt16Bits(datagram,CHECKSUM_POSITION);
int computedCheckSum = computeCheckSum(datagram);
if (computedCheckSum != checksum){
private void checkCheckSum(byte [] datagram) throws TransmissionError {
try {
int checksum = BytesArrayTools.readInt16Bits(datagram,CHECKSUM_POSITION);
int computedCheckSum = computeCheckSum(datagram);
if (computedCheckSum != checksum){
throw new TransmissionError();
}
} catch(SizeError e) {
throw new TransmissionError();
}
}

View File

@ -53,7 +53,7 @@ public class BytesArrayTools {
public static int readInt(byte[] array, int start) throws SizeError {
int size = 0;
for(int i=0;i<4;i++) {
size |= ((int)array[start + i]) << (8* (3 -i));
size |= (0xFF & (int)array[start + i]) << (8* (3 -i));
}
if (size < 0) {
// Size in array is probably correct
@ -72,11 +72,12 @@ public class BytesArrayTools {
int size = 0;
for(int i=0;i<2;i++) {
try {
size |= ((int)array[start + i]) << (8* (1 -i));
size |= (0xFF & (int)array[start + i]) << (8* (1 -i));
} catch (ArrayIndexOutOfBoundsException e){
// 0 padding
}
}
assert (size & 0xFFFF0000) == 0 : "Read on more than 16 bits";
return size;
}
@ -89,7 +90,7 @@ public class BytesArrayTools {
public static long readLong(byte[] array, int start) throws SizeError {
long size = 0;
for(int i=0;i<8;i++) {
size |= ((int)array[start + i]) << (8* (7 - i));
size |= (0xFF & (int)array[start + i]) << (8* (7 - i));
}
if (size < 0) {
// Size in array is probably correct