From 550637214e4df0cd44d64e83a0e57fc37f470bdb Mon Sep 17 00:00:00 2001 Message-Id: <550637214e4df0cd44d64e83a0e57fc37f470bdb@dist-git> From: Peter Krempa Date: Thu, 22 Jan 2015 15:53:51 +0100 Subject: [PATCH] conf: Don't corrupt metadata on OOM https://bugzilla.redhat.com/show_bug.cgi?id=1184929 Eric Blake suggested that we could do a little better in case copying of the metadata to be set fails. With this patch, the old metadata is discarded after the new string is copied successfuly. (cherry picked from commit 7655ed0802eecc3d8486a0360d2326ecd052e477) Signed-off-by: Jiri Denemark --- src/conf/domain_conf.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 4dbe3fc..c4829ff 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -19044,19 +19044,24 @@ virDomainDefSetMetadata(virDomainDefPtr def, xmlDocPtr doc = NULL; xmlNodePtr old; xmlNodePtr new; + char *tmp; int ret = -1; switch ((virDomainMetadataType) type) { case VIR_DOMAIN_METADATA_DESCRIPTION: + if (VIR_STRDUP(tmp, metadata) < 0) + goto cleanup; + VIR_FREE(def->description); - if (VIR_STRDUP(def->description, metadata) < 0) - goto cleanup; + def->description = tmp; break; case VIR_DOMAIN_METADATA_TITLE: + if (VIR_STRDUP(tmp, metadata) < 0) + goto cleanup; + VIR_FREE(def->title); - if (VIR_STRDUP(def->title, metadata) < 0) - goto cleanup; + def->title = tmp; break; case VIR_DOMAIN_METADATA_ELEMENT: -- 2.2.1