diff --git a/mms-lib/src/mms_codec.c b/mms-lib/src/mms_codec.c index e7d2dfc..ad1abb4 100644 --- a/mms-lib/src/mms_codec.c +++ b/mms-lib/src/mms_codec.c @@ -559,7 +559,7 @@ static gboolean extract_encoded_text(struct wsp_header_iter *iter, void *user) const unsigned char *p; unsigned int l; const char *text; - char *uninitialized_var(dec_text); + char *dec_text; p = wsp_header_iter_get_val(iter); l = wsp_header_iter_get_val_len(iter); @@ -574,6 +574,7 @@ static gboolean extract_encoded_text(struct wsp_header_iter *iter, void *user) /* (Value-len) Char-set Text-string */ dec_text = decode_encoded_string_with_mib_enum(p, l); break; + default: case WSP_VALUE_TYPE_SHORT: dec_text = NULL; break; @@ -587,6 +588,13 @@ static gboolean extract_encoded_text(struct wsp_header_iter *iter, void *user) return TRUE; } +static gboolean extract_subject(struct wsp_header_iter *iter, void *user) +{ + /* Ignore incorrectly encoded subjects */ + extract_encoded_text(iter, user); + return TRUE; +} + static gboolean extract_date(struct wsp_header_iter *iter, void *user) { time_t *out = user; @@ -949,7 +957,7 @@ static header_handler handler_for_type(enum mms_header header) case MMS_HEADER_STATUS: return &extract_status; case MMS_HEADER_SUBJECT: - return &extract_encoded_text; + return &extract_subject; case MMS_HEADER_TO: return &extract_text_array_element; case MMS_HEADER_TRANSACTION_ID: diff --git a/mms-lib/test/retrieve/data/InvalidSubject/m-notification.ind b/mms-lib/test/retrieve/data/InvalidSubject/m-notification.ind new file mode 100644 index 0000000..11e583f Binary files /dev/null and b/mms-lib/test/retrieve/data/InvalidSubject/m-notification.ind differ diff --git a/mms-lib/test/retrieve/data/InvalidSubject/m-retrieve.conf b/mms-lib/test/retrieve/data/InvalidSubject/m-retrieve.conf new file mode 100644 index 0000000..fabc2e6 Binary files /dev/null and b/mms-lib/test/retrieve/data/InvalidSubject/m-retrieve.conf differ diff --git a/mms-lib/test/retrieve/test_retrieve.c b/mms-lib/test/retrieve/test_retrieve.c index ee906b6..3163f9f 100644 --- a/mms-lib/test/retrieve/test_retrieve.c +++ b/mms-lib/test/retrieve/test_retrieve.c @@ -92,6 +92,11 @@ static const TestPartDesc retrieve_success3_parts [] = { { "text/plain;charset=utf-8", "<2>", "text_001.txt" } }; +static const TestPartDesc retrieve_invalid_subject [] = { + { "application/smil;charset=us-ascii", "", "smil.smi" }, + { "image/jpeg", "<1>", "1" } +}; + #define TEST_PARTS(parts) parts, G_N_ELEMENTS(parts) #define TEST_PARTS_NONE NULL, 0 @@ -132,6 +137,18 @@ static const TestDesc retrieve_tests[] = { MMS_MESSAGE_TYPE_ACKNOWLEDGE_IND, TEST_PARTS(retrieve_success3_parts), 0 + },{ + "InvalidSubject", + NULL, + "m-notification.ind", + "m-retrieve.conf", + SOUP_STATUS_OK, + MMS_CONTENT_TYPE, + NULL, + MMS_RECEIVE_STATE_DECODING, + MMS_MESSAGE_TYPE_ACKNOWLEDGE_IND, + TEST_PARTS(retrieve_invalid_subject), + 0 },{ "DeferSuccess", "Success1",