
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@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org