diff options
Diffstat (limited to 'src/libcharon/encoding/payloads/sa_payload.c')
-rw-r--r-- | src/libcharon/encoding/payloads/sa_payload.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/libcharon/encoding/payloads/sa_payload.c b/src/libcharon/encoding/payloads/sa_payload.c index becc4243d..05695fce2 100644 --- a/src/libcharon/encoding/payloads/sa_payload.c +++ b/src/libcharon/encoding/payloads/sa_payload.c @@ -297,8 +297,8 @@ METHOD(sa_payload_t, get_proposals, linked_list_t*, int ignore_struct_number = 0; enumerator_t *enumerator; proposal_substructure_t *substruct; - linked_list_t *list; proposal_t *proposal; + linked_list_t *list; if (this->type == SECURITY_ASSOCIATION_V1) { /* IKEv1 proposals start with 0 */ @@ -320,18 +320,16 @@ METHOD(sa_payload_t, get_proposals, linked_list_t*, if (ignore_struct_number < struct_number) { /* remove an already added, if first of series */ - list->remove_last(list, (void**)&proposal); - proposal->destroy(proposal); + if (list->remove_last(list, (void**)&proposal) == SUCCESS) + { + proposal->destroy(proposal); + } ignore_struct_number = struct_number; } continue; } struct_number++; - proposal = substruct->get_proposal(substruct); - if (proposal) - { - list->insert_last(list, proposal); - } + substruct->get_proposals(substruct, list); } enumerator->destroy(enumerator); return list; |