« Return to Thread: Optimize jabber_id_new()

Re: Optimize jabber_id_new()

by Paul Aurich-4 :: Rate this Message:

Reply (Restricted by the Administrator) | Reply to Author | View in Thread

And Mark Doliner spoke on 06/30/2009 01:31 AM, saying:
<snip>
> In other words: How does everyone feel about the attached patch?

Like Daniel and Ethan, I think this is fine, with a few comments (see below).

>
> -Mark
>

+ for (c = str; *c != '\0'; c++) {
+ switch (*c) {
+ case '@':
+ if (!at)
+ at = c;
+ break;
+ case '/':
+ if (!at) {
+ /*
+ * If at is NULL then c is still pointing to the node
+ * name, and node names can not contain forward slashes
+ */
+ return NULL;
+ }
+ if (!slash)
+ slash = c;
+ break;
+ default:

This introduces a few corner cases where invalid JIDs would get through (I
think something like "foo@@bar.com"). That's probably not too much of an
issue. It's also technically valid to have a JID of the form
"domain/resource", which this would fail to validate (again, not actually
too big of an issue).

I'd envision something like this (assuming enum { NODE, DOMAIN, RESOURCE }
state), which I don't think should add much overhead, but addresses both of
those issues:

case '@':
        if (state == NODE && !at) {
                at = c;
                state = DOMAIN;
        } else if (state == DOMAIN) {
                /* An '@' isn't valid in the domain portion of a JID */
                return NULL;
        }
        break;

case '/':
        if (!slash) {
                slash = c;
                state = RESOURCE;

                if (*(c+1) == '\0')
                        /*
                         * A JID containing '/' cannot have a 0-length
                         * resource.
                         */
                        return NULL;
        }
        break;

For the needs_validation == FALSE case, I would recommend moving to
g_ascii_strdown().

~Paul

_______________________________________________
Devel mailing list
Devel@...
http://pidgin.im/cgi-bin/mailman/listinfo/devel

 « Return to Thread: Optimize jabber_id_new()