pdr: pldm_entity_association_pdr_extract(): Assign out params at exit
Avoid assigning results to out-parameters before we know we can't fail.
Signed-off-by: Andrew Jeffery <andrew@aj.id.au>
Change-Id: I7b99d0a04471e97ae6bf13c2467dd938c57c1485
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 501794a..1524149 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -66,6 +66,7 @@
19. pdr: pldm_entity_association_tree_find(): Early exit on bad arguments
20. pdr: pldm_entity_association_tree_destroy_root(): Exit early on bad arg
21. pdr: pldm_entity_association_pdr_extract(): Early exit on bad arguments
+22. pdr: pldm_entity_association_pdr_extract(): Assign out params at exit
### Deprecated
diff --git a/src/pdr.c b/src/pdr.c
index aeab9e1..5f2634c 100644
--- a/src/pdr.c
+++ b/src/pdr.c
@@ -1304,25 +1304,28 @@
start += sizeof(struct pldm_pdr_hdr);
struct pldm_pdr_entity_association *entity_association_pdr =
(struct pldm_pdr_entity_association *)start;
- *num_entities = entity_association_pdr->num_children + 1;
- assert(*num_entities >= 2);
+ size_t l_num_entities = entity_association_pdr->num_children + 1;
+ assert(l_num_entities >= 2);
assert(start + sizeof(struct pldm_pdr_entity_association) +
- sizeof(pldm_entity) * (*num_entities - 2) ==
+ sizeof(pldm_entity) * (l_num_entities - 2) ==
end);
- *entities = malloc(sizeof(pldm_entity) * *num_entities);
- assert(*entities != NULL);
- (*entities)[0].entity_type =
+ pldm_entity *l_entities = malloc(sizeof(pldm_entity) * l_num_entities);
+ assert(l_entities != NULL);
+ l_entities[0].entity_type =
le16toh(entity_association_pdr->container.entity_type);
- (*entities)[0].entity_instance_num =
+ l_entities[0].entity_instance_num =
le16toh(entity_association_pdr->container.entity_instance_num);
- (*entities)[0].entity_container_id =
+ l_entities[0].entity_container_id =
le16toh(entity_association_pdr->container.entity_container_id);
pldm_entity *curr_entity = entity_association_pdr->children;
- for (size_t i = 1; i < *num_entities; i++, curr_entity++) {
- (*entities)[i].entity_type = le16toh(curr_entity->entity_type);
- (*entities)[i].entity_instance_num =
+ for (size_t i = 1; i < l_num_entities; i++, curr_entity++) {
+ l_entities[i].entity_type = le16toh(curr_entity->entity_type);
+ l_entities[i].entity_instance_num =
le16toh(curr_entity->entity_instance_num);
- (*entities)[i].entity_container_id =
+ l_entities[i].entity_container_id =
le16toh(curr_entity->entity_container_id);
}
+
+ *num_entities = l_num_entities;
+ *entities = l_entities;
}