[libvirt] [PATCH v3] Fixed URI parsing

Eric Blake eblake at redhat.com
Fri Feb 24 18:40:42 UTC 2012


On 02/24/2012 11:09 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.
> Also there is one new syntax check function to prohibit these functions
> anywhere else.
> 

> +++ b/src/libvirt_private.syms
> @@ -1430,6 +1430,11 @@ virTypedParameterArrayValidate;
>  virTypedParameterAssign;
> 
> 
> +# viruri.h
> +virURIParse;
> +virURIFormat;

Swap these two lines.

> +xmlURIPtr
> +virURIParse(const char *uri)
> +{
> +    xmlURIPtr ret = xmlParseURI(uri);
> +
> +    /* First check: does it even make sense to jump inside */
> +    if (ret != NULL &&
> +        ret->server != NULL &&
> +        ret->server[0] == '[') {
> +        size_t length = strlen(ret->server);
> +
> +        /* We want to modify the server string only if there are
> +         * square brackets on both ends and inside there is IPv6
> +         * address. Otherwise we could make a mistake by modifying
> +         * something else than IPv6 address. */

s/else than/other than an/

> +unsigned char *
> +virURIFormat(xmlURIPtr uri)
> +{
> +    char *tmpserver = NULL, *backupserver = uri->server;

NULL deref...

> +    unsigned char *ret;
> +
> +    /* First check: does it make sense to do anything */
> +    if (uri != NULL &&

...since you allow uri == NULL on input.  Reorder the assignment to
backupserver to come after you know uri is not NULL.

> +        uri->server != NULL &&
> +        strchr(uri->server, ':') != NULL) {
> +
> +        if (virAsprintf(&tmpserver, "[%s]", uri->server) == -1)

It's more idiomatic to use '< 0', not '== -1'.

> +++ b/src/util/viruri.h
> @@ -0,0 +1,18 @@
> +/*
> + * viruri.h: internal definitions used for URI parsing.

Needs a copyright header.

ACK with those nits fixed; I think we're close enough that you can push
without having to get a review on a v4.

-- 
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/1b0bc5ea/attachment-0001.sig>


More information about the libvir-list mailing list