summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/util/profile/prof_get.c41
1 files changed, 22 insertions, 19 deletions
diff --git a/src/util/profile/prof_get.c b/src/util/profile/prof_get.c
index 844d226899..b2ea40ce1a 100644
--- a/src/util/profile/prof_get.c
+++ b/src/util/profile/prof_get.c
@@ -544,28 +544,31 @@ static errcode_t
set_results(const char *name, const char *value, char **ret_name,
char **ret_value)
{
- if (ret_name) {
- if (name) {
- *ret_name = strdup(name);
- if (!*ret_name)
- return ENOMEM;
- } else
- *ret_name = NULL;
+ char *name_copy = NULL, *value_copy = NULL;
+
+ if (ret_name && name) {
+ name_copy = strdup(name);
+ if (name_copy == NULL)
+ goto oom;
}
- if (ret_value) {
- if (value) {
- *ret_value = strdup(value);
- if (!*ret_value) {
- if (ret_name) {
- free(*ret_name);
- *ret_name = NULL;
- }
- return ENOMEM;
- }
- } else
- *ret_value = NULL;
+ if (ret_value && value) {
+ value_copy = strdup(value);
+ if (value_copy == NULL)
+ goto oom;
}
+ if (ret_name)
+ *ret_name = name_copy;
+ if (ret_value)
+ *ret_value = value_copy;
return 0;
+oom:
+ free(name_copy);
+ free(value_copy);
+ if (ret_name)
+ *ret_name = NULL;
+ if (ret_value)
+ *ret_value = NULL;
+ return ENOMEM;
}
errcode_t KRB5_CALLCONV