On 03/16/2018 01:02 PM, Sukrit Bhatnagar wrote: > This patch adds virQEMUBuildBufferEscapeComma wherever applicable in src/qemu/qemu_command.c > Based on: https://wiki.libvirt.org/page/BiteSizedTasks#qemu:_Use_comma_escaping_for_more_command_line_values > Try to keep shorter lines in your commit message (generally <=70 ish characters) and the link to the bite size task should have gone under the --- below since it's likely that once this task is complete (and code pushed) that someone will remove the entry from the bite size task page and we don't really want a knowingly dead link to live in git history forever. In any case, consider the following (or something even shorter): qemu: Add comma escape for more command line options This patch adds virQEMUBuildBufferEscapeComma to qemu command line processing for data fields which are user provided in order to ensure that if a comma (',') is provided that it'll be properly handled by the qemu monitor which expects a double comma as a form of escaping. > Signed-off-by: Sukrit Bhatnagar <skrtbhtngr@xxxxxxxxx> > --- > BTW: Since this was a followup/adjustment of what you submitted: https://www.redhat.com/archives/libvir-list/2018-March/msg00940.html then you should prefix with a "v2" via something like '--subject-prefix="PATCH v2"' on your 'git send-email' where you can place a link to the v1 in this section (below the ---) and a description of what changed or was fixed since v1. BTW: Your next patch will be v3, so you'll have a shot to try it! Providing a link to the previous version is generally "nice" so that the reviewer doesn't have to search for it and it gives a bit more history. > > This patch is submitted towards my proposal for GSoC'18. > > Changes made: > - info->romfile in qemuBuildRomStr > - disk->vendor, disk->product in qemuBuildDriveDevStr > - fs->src->path in qemuBuildFSStr > - fs->dst in qemuBuildFSDevStr > - connect= in qemuBuildHostNetStr > - fileval handling in qemuBuildChrChardevStr > - TYPE_DEV, TYPE_PIPE handling in qemuBuildChrChardevStr > - cfg->vncTLSx509certdir in qemuBuildGraphicsVNCCommandLine > - cfg->spiceTLSx509certdir in qemuBuildGraphicsSPICECommandLine > - loader->path, loader->nvram usage qemuBuildDomainLoaderCommandLine > > Places where no changes were made: > - src->hosts->socket in qemuBuildNetworkDriveURI uses virAsprintf not virBufferAsprintf; src->path, src->configFile are not used Sure; however, you could use virBuffer* API's and then use virBufferContentAndReset in order to get the escaped string you'd want for the final result. I'll admit the src->configFile processing in qemuBuildNetworkDriveStr appears awful due to the need to escape the ':' for ":conf=", but I think you can get away with the EscapeComma on just the src->configFile. There is a test for adding the ":conf=%s", so if you do get it wrong, you'll know... If you wanted to be sure the right thing was done with the comma, then alter the XML file and see that the ARGS output gets the double comma. Whether that becomes part of the commit isn't necessary, but at least it proves to yourself that things were done right. > - qemuBuildChrArgStr function does not exist hint... git log -p src/qemu/qemu_command.c <search for qemuBuildChrArgStr> and you'd see that processing was moved by commit id '426dc5eb' into qemuBuildChrChardevStr and qemuBuildChrChardevFileStr which were handled in this patch. > - not applicable on data.nix.path in qemuBuildVhostuserCommandLine True, since it's not built into the qemu command line but rather as part of some other command... > - converting places that use strchr in qemuBuildSmartcardCommandLine to use virBufferEscape Perhaps the request here was to remove the check and failure for "," in the name/path and use EscapeComma instead... Another one that wasn't listed is "rendernode" - although nothing tells us "how" that field is populated in the XML, I suppose someone could add a "," into the provided entry and that'd be problematic. Also "throttling.group" and "group_name" - although that's already escaped, someone conceivably could put in a "," into the name too as it's not checked. FWIW: After applying your patch I did a: grep "=%s" src/qemu/qemu_command.c | \ grep -v "bus=%s" | grep -v "fd=%s" | grep -v "id=%s" and that reduced the number things to specifically look at for needing the comma escaping. You may want to make the same check - I didn't complete looking at the output... > > I have run `make check VIR_TEST_EXPENSIVE=1`, `make syntax-check` and `make -C tests valgrind`. > Some tests fail on my system, even for an unmodified clone of the repo. > But, all the tests which were passed by the unmodified clone were passed after I made these changes. > > As always, your feedback is welcome! > > > src/qemu/qemu_command.c | 73 +++++++++++++++++++++++++++++-------------------- > 1 file changed, 44 insertions(+), 29 deletions(-) > > diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > index fa0aa5d5c..06f4f72fc 100644 > --- a/src/qemu/qemu_command.c > +++ b/src/qemu/qemu_command.c [...] > @@ -3603,10 +3611,9 @@ qemuBuildHostNetStr(virDomainNetDefPtr net, > break; > > case VIR_DOMAIN_NET_TYPE_CLIENT: > - virBufferAsprintf(&buf, "socket%cconnect=%s:%d,", > - type_sep, > - net->data.socket.address, > - net->data.socket.port); > + virBufferAsprintf(&buf, "socket%cconnect=", type_sep); > + virQEMUBuildBufferEscapeComma(&buf, net->data.socket.address); > + virBufferAsprintf(&buf, ":%d,", net->data.socket.port); > break; > > case VIR_DOMAIN_NET_TYPE_SERVER: Below here there's a few more "%s" for net->data.socket.address that weren't addressed in different case's (SERVER, MCAST, UDP) > @@ -4858,7 +4865,8 @@ qemuBuildChrChardevFileStr(virLogManagerPtr logManager, [...] The rest seemed fine to my eyes. John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list