diff --git a/src/util/virbuffer.c b/src/util/virbuffer.c index 96a0f16d57..0089d1b42c 100644 --- a/src/util/virbuffer.c +++ b/src/util/virbuffer.c @@ -1,7 +1,7 @@ /* * virbuffer.c: buffers for libvirt * - * Copyright (C) 2005-2008, 2010-2014 Red Hat, Inc. + * Copyright (C) 2005-2008, 2010-2015 Red Hat, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -188,23 +188,27 @@ virBufferAddBuffer(virBufferPtr buf, virBufferPtr toadd) { unsigned int needSize; - if (!buf || !toadd) + if (!toadd) return; + if (!buf) + goto done; + if (buf->error || toadd->error) { if (!buf->error) buf->error = toadd->error; - virBufferFreeAndReset(toadd); - return; + goto done; } needSize = buf->use + toadd->use; if (virBufferGrow(buf, needSize - buf->use) < 0) - return; + goto done; memcpy(&buf->content[buf->use], toadd->content, toadd->use); buf->use += toadd->use; buf->content[buf->use] = '\0'; + + done: virBufferFreeAndReset(toadd); }