diff --git a/src/mms/iso_mms/common/mms_type_spec.c b/src/mms/iso_mms/common/mms_type_spec.c index 76c4cfea..5dd93c3f 100644 --- a/src/mms/iso_mms/common/mms_type_spec.c +++ b/src/mms/iso_mms/common/mms_type_spec.c @@ -138,10 +138,8 @@ MmsVariableSpecification_isValueOfType(MmsVariableSpecification* self, MmsValue* if (self->typeSpec.bitString == value->value.bitString.size) return true; - if (self->typeSpec.bitString < 0) { - if (value->value.bitString.size <= (-self->typeSpec.bitString)) - return true; - } + if (self->typeSpec.bitString < 0) + return true; } else if (self->type == MMS_FLOAT) { if ((self->typeSpec.floatingpoint.exponentWidth == value->value.floatingPoint.exponentWidth) && diff --git a/src/mms/iso_mms/common/mms_value.c b/src/mms/iso_mms/common/mms_value.c index 150798e4..88eda231 100644 --- a/src/mms/iso_mms/common/mms_value.c +++ b/src/mms/iso_mms/common/mms_value.c @@ -259,11 +259,14 @@ MmsValue_update(MmsValue* self, const MmsValue* update) case MMS_BIT_STRING: if (self->value.bitString.size == update->value.bitString.size) memcpy(self->value.bitString.buf, update->value.bitString.buf, bitStringByteSize(self)); - else if (update->value.bitString.size < self->value.bitString.size) { + else if (update->value.bitString.size != self->value.bitString.size) { int i; for (i = 0; i < update->value.bitString.size; i++) { - MmsValue_setBitStringBit(self, i, MmsValue_getBitStringBit(update, i)); + if (i < self->value.bitString.size) + MmsValue_setBitStringBit(self, i, MmsValue_getBitStringBit(update, i)); + else + break; } } else