From b9ded374e3c6f933c0a80eaf3cd8a846d126949b Mon Sep 17 00:00:00 2001 From: Michael Zillgith Date: Thu, 2 May 2019 12:05:36 +0200 Subject: [PATCH] - MMS client/server: accept empty bit strings --- src/mms/iso_mms/common/mms_common_msg.c | 9 ++++++++- src/mms/iso_mms/common/mms_value.c | 3 ++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/mms/iso_mms/common/mms_common_msg.c b/src/mms/iso_mms/common/mms_common_msg.c index 38cb34f9..8bf0b861 100644 --- a/src/mms/iso_mms/common/mms_common_msg.c +++ b/src/mms/iso_mms/common/mms_common_msg.c @@ -319,7 +319,7 @@ mmsMsg_parseDataElement(Data_t* dataElement) int size = dataElement->choice.bitstring.size; - if (size > 0) { + if (size >= 0) { int maxSize = (size * 8); int bitSize = maxSize - dataElement->choice.bitstring.bits_unused; @@ -335,6 +335,13 @@ mmsMsg_parseDataElement(Data_t* dataElement) memcpy(value->value.bitString.buf, dataElement->choice.bitstring.buf, size); } + else if (bitSize == 0) { + value = (MmsValue*) GLOBAL_CALLOC(1, sizeof(MmsValue)); + + value->type = MMS_BIT_STRING; + value->value.bitString.size = 0; + value->value.bitString.buf = NULL; + } else { if (DEBUG_MMS_CLIENT) printf("MMS CLIENT: error parsing data element (bit string padding problem)!\n"); diff --git a/src/mms/iso_mms/common/mms_value.c b/src/mms/iso_mms/common/mms_value.c index 8fee6898..93fca1c2 100644 --- a/src/mms/iso_mms/common/mms_value.c +++ b/src/mms/iso_mms/common/mms_value.c @@ -1196,7 +1196,8 @@ MmsValue_delete(MmsValue* self) GLOBAL_FREEMEM(self->value.floatingPoint.buf); break; case MMS_BIT_STRING: - GLOBAL_FREEMEM(self->value.bitString.buf); + if (self->value.bitString.buf != NULL) + GLOBAL_FREEMEM(self->value.bitString.buf); break; case MMS_OCTET_STRING: GLOBAL_FREEMEM(self->value.octetString.buf);