On Wed, Sep 25, 2013 at 3:21 AM, Daniel P. Berrange <berrange@xxxxxxxxxx> wrote: > 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@xxxxxxxxxx> wrote: >> > From: "Daniel P. Berrange" <berrange@xxxxxxxxxx> >> > >> > If OOM occurs in qemuParseCommandLineDisk some intermediate >> > variables will be leaked when parsing Sheepdog or RBD disks. >> > >> > Signed-off-by: Daniel P. Berrange <berrange@xxxxxxxxxx> >> > --- >> > 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. Ok. Makes sense. Just wanted to ask for clarification. > >> >> > 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 :| -- Doug Goldstein -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list