X-Git-Url: https://the.earth.li/gitweb/?a=blobdiff_plain;f=parsekey.c;h=008248e005633f0563d9bdcd409c61130cfc1423;hb=5d859953e393a2539e67df3ce73798e7029cf5b9;hp=6255ab8bd3aa6dd94643792fb881676d5cdde949;hpb=72879375e37b8bbbd89fc641ddc102de804b3e1b;p=onak.git diff --git a/parsekey.c b/parsekey.c index 6255ab8..008248e 100644 --- a/parsekey.c +++ b/parsekey.c @@ -356,10 +356,25 @@ onak_status_t read_openpgp_stream(int (*getchar_func)(void *ctx, size_t count, } } - /* Trim the last packet if it doesn't actually exist */ - if (packetend != NULL && (*packetend)->packet == NULL) { - free(*packetend); - *packetend = NULL; + if (packetend != NULL) { + if ((*packetend)->packet != NULL) { + /* If we got an invalid final packet, discard it. */ + if ((*packetend)->packet->data != NULL && + rc != ONAK_E_OK) { + free((*packetend)->packet->data); + (*packetend)->packet->data = NULL; + } + /* If we didn't get any data, clean it up. */ + if ((*packetend)->packet->data == NULL) { + free((*packetend)->packet); + (*packetend)->packet = NULL; + } + } + /* Trim the last packet if it doesn't actually exist */ + if ((*packetend)->packet == NULL) { + free(*packetend); + *packetend = NULL; + } } return (rc);