On Tue, Sep 24, 2013 at 04:24:43PM -0500, Doug Goldstein wrote:
On Tue, Sep 24, 2013 at 11:03 AM, Daniel P. Berrange
<berrange(a)redhat.com> wrote:
> From: "Daniel P. Berrange" <berrange(a)redhat.com>
>
> If OOM occurs in qemuParseCommandLineDisk some intermediate
> variables will be leaked when parsing Sheepdog or RBD disks.
>
> Signed-off-by: Daniel P. Berrange <berrange(a)redhat.com>
> ---
> src/qemu/qemu_command.c | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index a82c5dd..f6a3aa2 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -9935,8 +9935,10 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
> if (VIR_STRDUP(def->src, p + strlen("rbd:")) <
0)
> goto error;
> /* old-style CEPH_ARGS env variable is parsed later */
> - if (!old_style_ceph_args && qemuParseRBDString(def)
< 0)
> - goto cleanup;
> + if (!old_style_ceph_args && qemuParseRBDString(def)
< 0) {
> + VIR_FREE(p);
> + goto error;
> + }
>
> VIR_FREE(p);
> } else if (STRPREFIX(def->src, "gluster:") ||
> @@ -9960,17 +9962,20 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt,
> def->protocol = VIR_DOMAIN_DISK_PROTOCOL_SHEEPDOG;
> if (VIR_STRDUP(def->src, p + strlen("sheepdog:"))
< 0)
> goto error;
> + VIR_FREE(p);
>
> /* def->src must be [vdiname] or [host]:[port]:[vdiname] */
> port = strchr(def->src, ':');
> if (port) {
> - *port++ = '\0';
> - vdi = strchr(port, ':');
> + *port = '\0';
> + vdi = strchr(port + 1, ':');
> if (!vdi) {
> + *port = ':';
Is this bit necessary? Or is it for making the error message look better?
Yep, we want to show the user their original full input, not the truncated
one.
> virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("cannot parse sheepdog filename
'%s'"), p);
> + _("cannot parse sheepdog filename
'%s'"), def->src);
> goto error;
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|