as the username separator and the subsequent ones automatically escaped.
Therefore, `http://a@b@c.cz/' is normalized as `http://a@b%40c.cz/'.
It's probably an invalid URL (have to check all the possible loopholes
in the spec yet :) ), but it occurs in the wild anyway, so let's try
to treat them with grace.
{
if (s[1] == '/') /* Host spec */
{
- byte *q, *w, *e;
+ byte *q, *e;
+ byte *at = NULL;
char *ep;
s += 2;
q = d;
while (*s && *s != '/' && *s != '?') /* Copy user:passwd@host:port */
- *d++ = *s++;
+ {
+ if (*s != '@')
+ *d++ = *s;
+ else if (!at)
+ {
+ *d++ = 0;
+ at = d;
+ }
+ else /* This shouldn't happen with sane URL's, but we need to be sure */
+ *d++ = NCC_AT;
+ s++;
+ }
*d++ = 0;
- w = strchr(q, '@');
- if (w) /* user:passwd present */
+ if (at) /* user:passwd present */
{
- *w++ = 0;
u->user = q;
if (e = strchr(q, ':'))
{
}
}
else
- w = q;
- e = strchr(w, ':');
+ at = q;
+ e = strchr(at, ':');
if (e) /* host:port present */
{
uns p;
else if (p) /* Port 0 (e.g. in :/) is treated as default port */
u->port = p;
}
- u->host = w;
+ u->host = at;
}
}