static size_t parse_mb(php_http_url_t *url, parse_mb_what_t what, const char *ptr, const char *end, const char *begin, zend_bool silent)
{
size_t consumed = 0;
- zend_bool idn = (what == PARSE_HOSTINFO) && (url->flags & PHP_HTTP_URL_PARSE_IDN);
+ zend_bool idn = (what == PARSE_HOSTINFO) && (url->flags & PHP_HTTP_URL_PARSE_TOIDN);
if (url->flags & PHP_HTTP_URL_PARSE_MBUTF8) {
consumed = parse_mb_utf8(url, ptr, end, idn);
#endif
if (consumed) {
- if (!(url->flags & PHP_HTTP_URL_PARSE_PCTENC) || what == PARSE_HOSTINFO || what == PARSE_SCHEME) {
+ if (!(url->flags & PHP_HTTP_URL_PARSE_TOPCT) || what == PARSE_HOSTINFO || what == PARSE_SCHEME) {
PHP_HTTP_DUFF(consumed, url->buffer[url->offset++] = *ptr++);
} else {
int i = 0;
case ':':
if (port) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,
- "Failed to parse port; duplicate ':' at pos %u in '%s'",
+ "Failed to parse port; unexpected ':' at pos %u in '%s'",
(unsigned) (ptr - tmp), tmp);
return FAILURE;
}
}
#ifdef PHP_HTTP_HAVE_IDN
- if (url->flags & PHP_HTTP_URL_PARSE_IDN) {
+ if (url->flags & PHP_HTTP_URL_PARSE_TOIDN) {
char *idn = NULL;
int rv = -1;
static const char *parse_authority(php_http_url_t *url)
{
- const char *tmp = url->ptr;
+ const char *tmp = url->ptr, *host = NULL;
do {
switch (*url->ptr) {
case '@':
/* userinfo delimiter */
+ if (host) {
+ TSRMLS_FETCH_FROM_CTX(url->ts);
+ php_error_docref(NULL TSRMLS_CC, E_WARNING,
+ "Failed to parse userinfo; unexpected '@'");
+ return NULL;
+ }
+ host = url->ptr + 1;
if (tmp != url->ptr && SUCCESS != parse_userinfo(url, tmp)) {
return NULL;
}
const char *tmp = url->ptr + !!*url->ptr;
TSRMLS_FETCH_FROM_CTX(url->ts);
- /* is there actually a query to parse ? */
- if (!*url->ptr && *url->ptr != '?') {
+ /* is there actually a query to parse? */
+ if (*url->ptr != '?') {
return url->ptr;
}
const char *tmp;
TSRMLS_FETCH_FROM_CTX(url->ts);
- /* is there actually a fragment to parse */
- if (!*url->ptr && *url->ptr != '#') {
+ /* is there actually a fragment to parse? */
+ if (*url->ptr != '#') {
return url->ptr;
}
#endif
zend_declare_class_constant_long(php_http_url_class_entry, ZEND_STRL("PARSE_MBUTF8"), PHP_HTTP_URL_PARSE_MBUTF8 TSRMLS_CC);
#ifdef PHP_HTTP_HAVE_IDN
- zend_declare_class_constant_long(php_http_url_class_entry, ZEND_STRL("PARSE_IDN"), PHP_HTTP_URL_PARSE_IDN TSRMLS_CC);
+ zend_declare_class_constant_long(php_http_url_class_entry, ZEND_STRL("PARSE_TOIDN"), PHP_HTTP_URL_PARSE_TOIDN TSRMLS_CC);
#endif
- zend_declare_class_constant_long(php_http_url_class_entry, ZEND_STRL("PARSE_PCTENC"), PHP_HTTP_URL_PARSE_PCTENC TSRMLS_CC);
+ zend_declare_class_constant_long(php_http_url_class_entry, ZEND_STRL("PARSE_TOPCT"), PHP_HTTP_URL_PARSE_TOPCT TSRMLS_CC);
return SUCCESS;
}