From fb383abfb252f8ed79faa23ed78c5b5c35d2fb3d Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 29 Oct 2020 09:51:38 +0100 Subject: [PATCH] - MMS: changed handling of variable sized bit strings (now also accepts bit strings of larger size, ignoring the bits that exceed the specified size) --- src/mms/iso_mms/common/mms_type_spec.c | 6 ++---- src/mms/iso_mms/common/mms_value.c | 5 +++-- 2 files changed, 5 insertions(+), 6 deletions(-) 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 bf38ae7b..53337ed2 100644 --- a/src/mms/iso_mms/common/mms_value.c +++ b/src/mms/iso_mms/common/mms_value.c @@ -258,11 +258,12 @@ 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