diff --git a/src/mms/asn1/ber_encoder.c b/src/mms/asn1/ber_encoder.c index eaa53256..ba406dea 100644 --- a/src/mms/asn1/ber_encoder.c +++ b/src/mms/asn1/ber_encoder.c @@ -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; } diff --git a/src/mms/asn1/ber_integer.c b/src/mms/asn1/ber_integer.c index 0c3042eb..36789971 100644 --- a/src/mms/asn1/ber_integer.c +++ b/src/mms/asn1/ber_integer.c @@ -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