case ':': case '/': case '?': case '#':
break;
default:
+ if (parser->parse_prefix)
+ break;
parser->error = "Invalid host identifier";
return -1;
}
case '/': case '?': case '#':
break;
default:
+ if (parser->parse_prefix)
+ break;
parser->error = "Invalid host port";
return -1;
}
parser->cur++;
}
- if (parser->cur < parser->end && *parser->cur != '/' &&
- *parser->cur != '?' && *parser->cur != '#') {
+ if (!parser->parse_prefix && parser->cur < parser->end &&
+ *parser->cur != '/' && *parser->cur != '?' && *parser->cur != '#') {
parser->error = p_strdup_printf(parser->pool,
"Path component contains invalid character %s",
uri_char_sanitize(*parser->cur));
array_append_zero(&segments);
*path_r = array_get(&segments, &count);
}
- if (parser->cur < parser->end &&
+ if (!parser->parse_prefix && parser->cur < parser->end &&
*parser->cur != '?' && *parser->cur != '#') {
parser->error = p_strdup_printf(parser->pool,
"Path component contains invalid character %s",
parser->cur++;
}
- if (parser->cur < parser->end && *parser->cur != '#') {
+ if (!parser->parse_prefix && parser->cur < parser->end &&
+ *parser->cur != '#') {
parser->error = p_strdup_printf(parser->pool,
"Query component contains invalid character %s",
uri_char_sanitize(*parser->cur));
parser->cur++;
}
- if (parser->cur < parser->end) {
+ if (!parser->parse_prefix && parser->cur < parser->end) {
parser->error = p_strdup_printf(parser->pool,
"Fragment component contains invalid character %s",
uri_char_sanitize(*parser->cur));