- fixed bug in BerInteger_setUint16

v1.3
Michael Zillgith 6 years ago
parent 5a23c404d1
commit 51abe01d85

@ -194,7 +194,6 @@ BerEncoder_revertByteOrder(uint8_t* octets, const int size)
int int
BerEncoder_compressInteger(uint8_t* integer, int originalSize) BerEncoder_compressInteger(uint8_t* integer, int originalSize)
{ {
uint8_t* integerEnd = integer + originalSize - 1; uint8_t* integerEnd = integer + originalSize - 1;
uint8_t* bytePosition; uint8_t* bytePosition;
@ -205,7 +204,7 @@ BerEncoder_compressInteger(uint8_t* integer, int originalSize)
continue; continue;
} }
else if (bytePosition[0] == 0xff) { else if (bytePosition[0] == 0xff) {
if (bytePosition[1] & 0x80) if ((bytePosition[1] & 0x80) == 0x80)
continue; continue;
} }

@ -1,7 +1,7 @@
/* /*
* ber_integer.c * ber_integer.c
* *
* Copyright 2013 Michael Zillgith * Copyright 2013-2019 Michael Zillgith
* *
* This file is part of libIEC61850. * This file is part of libIEC61850.
* *
@ -106,7 +106,23 @@ BerInteger_setUint16(Asn1PrimitiveValue* self, uint16_t value)
uint16_t valueCopy = value; uint16_t valueCopy = value;
uint8_t* valueBuffer = (uint8_t*) &valueCopy; uint8_t* valueBuffer = (uint8_t*) &valueCopy;
return setIntegerValue(self, valueBuffer, sizeof(value)); uint8_t byteBuffer[3];
int i;
#if (ORDER_LITTLE_ENDIAN == 1)
byteBuffer[2] = 0;
for (i = 0; i < 2; i++)
byteBuffer[i] = valueBuffer[i];
#else
byteBuffer[0] = 0;
for (i = 0; i < 2; i++)
byteBuffer[i + 1] = valueBuffer[i];
#endif /* (ORDER_LITTLE_ENDIAN == 1) */
return setIntegerValue(self, byteBuffer, sizeof(byteBuffer));
} }
int int

Loading…
Cancel
Save