diff --git a/src/mms/iso_mms/client/mms_client_journals.c b/src/mms/iso_mms/client/mms_client_journals.c index affbca57..e13509ef 100644 --- a/src/mms/iso_mms/client/mms_client_journals.c +++ b/src/mms/iso_mms/client/mms_client_journals.c @@ -115,35 +115,37 @@ parseJournalVariables(uint8_t* buffer, int bufPos, int maxLength, MmsJournalEntr switch (tag) { case 0x30: /* journalVariable */ - MmsJournalVariable journalVariable = (MmsJournalVariable) - GLOBAL_CALLOC(1, sizeof(struct sMmsJournalVariable)); - - if (journalVariable) { - if (parseJournalVariable(buffer, bufPos, length, journalVariable)) + MmsJournalVariable journalVariable = (MmsJournalVariable) + GLOBAL_CALLOC(1, sizeof(struct sMmsJournalVariable)); + + if (journalVariable) { - LinkedList_add(journalEntry->journalVariables, (void*) journalVariable); + if (parseJournalVariable(buffer, bufPos, length, journalVariable)) + { + LinkedList_add(journalEntry->journalVariables, (void*) journalVariable); + } + else + { + if (journalVariable->tag) + GLOBAL_FREEMEM(journalVariable->tag); + + if (journalVariable->value) + MmsValue_delete(journalVariable->value); + + GLOBAL_FREEMEM(journalVariable); + + return false; + } } else { - if (journalVariable->tag) - GLOBAL_FREEMEM(journalVariable->tag); - - if (journalVariable->value) - MmsValue_delete(journalVariable->value); - - GLOBAL_FREEMEM(journalVariable); + if (DEBUG_MMS_CLIENT) + printf("MMS_CLIENT: parseReadJournalResponse: out of memory\n"); return false; } } - else - { - if (DEBUG_MMS_CLIENT) - printf("MMS_CLIENT: parseReadJournalResponse: out of memory\n"); - - return false; - } break;