- fixed bug in BerInteger_setUint16

pull/179/head
Michael Zillgith 6 years ago
parent e4c3875e3e
commit 6e9047916c

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

@ -1,7 +1,7 @@
/*
* ber_integer.c
*
* Copyright 2013 Michael Zillgith
* Copyright 2013-2019 Michael Zillgith
*
* This file is part of libIEC61850.
*
@ -106,7 +106,23 @@ BerInteger_setUint16(Asn1PrimitiveValue* self, uint16_t value)
uint16_t valueCopy = value;
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

Loading…
Cancel
Save