[libvirt] [PATCH v2] Fixed URI parsing
Eric Blake
eblake at redhat.com
Fri Feb 24 14:09:32 UTC 2012
On 02/24/2012 06:30 AM, Martin Kletzander wrote:
> Function xmlParseURI does not remove square brackets around IPv6
> address when parsing. One of the solutions is making wrappers around
> functions working with xmlURI*. This assures that uri->server will be
> always properly assigned and it doesn't have to be changed when used
> on some new place in the code.
> For this purpose, functions virParseURI and virSaveURI were
> added. These function are wrappers around xmlParseURI and xmlSaveUri
> respectively.
>
> + */
> +unsigned char *
> +virSaveURI(xmlURIPtr uri)
> +{
> + char *tmpserver, *backupserver = uri->server;
> + unsigned char *ret;
> + bool fixback = false;
Instead of using bool fixback, I'd set tmpserver as NULL here...
> +
> + /* First check: does it make sense to do anything */
> + if (uri != NULL &&
> + uri->server != NULL &&
> + strchr(uri->server, ':') != NULL) {
> +
> + /* To be sure we have enough space for the brackets, we save
> + * the old string and then alocate a new one */
s/alocate/allocate/ - but see below, as I don't think you need this comment.
> +
> + /* the "+ 2" is room for square brackets and + 1 for '\0' */
> + size_t length = strlen(uri->server) + 3;
> +
> + if(VIR_ALLOC_N(tmpserver, length) < 0) {
> + virReportOOMError();
No need to raise OOM error here - all callers of xmlSaveUri were already
raising their own OOM after a NULL return.
> + return NULL;
> + }
> +
> + snprintf(tmpserver, length, "[%s]", uri->server);
I'd just use virAsnprintf(&tmpserver, "[%s]", uri->server); none of this
need to call strlen, VIR_ALLOC_N, or snprintf.
> +
> + uri->server = tmpserver;
> + bool fixback = true;
> + }
> +
> + ret = xmlSaveUri(uri);
> +
> + /* Put the fixed version back */
> + if (fixback) {
...and check 'if (tmpserver)' here (that is, fixback is redundant with
whether tmpserver was assigned at this point).
> + uri->server = backupserver;
> + VIR_FREE(tmpserver);
> + }
> +
> + return ret;
> +}
>
I'm also a bit worried that we might regress if we don't add a syntax
check; can you look at adding a rule to cfg.mk that poisons xmlParseURI
and xmlSaveUri (wow, libxml2 really does have the awful URI vs. Uri in
its naming conventions), then exempt util/uri.c from the check as the
only file allowed to use them.
--
Eric Blake eblake at redhat.com +1-919-301-3266
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 620 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20120224/eeee4dae/attachment-0001.sig>
More information about the libvir-list
mailing list