projects
/
m6w6
/
ext-http
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
be more verbose about nghttp2 skip
[m6w6/ext-http]
/
src
/
php_http_url.c
diff --git
a/src/php_http_url.c
b/src/php_http_url.c
index cce4ba7b16ed40bd9944a74243a788eec4a501e1..3ed2e3cbf2fd6beeee72a41ca50345b957efbdf6 100644
(file)
--- a/
src/php_http_url.c
+++ b/
src/php_http_url.c
@@
-263,6
+263,7
@@
php_http_url_t *php_http_url_mod(const php_http_url_t *old_url, const php_http_u
/* replace directory references if path is not a single slash */
if ((flags & PHP_HTTP_URL_SANITIZE_PATH)
/* replace directory references if path is not a single slash */
if ((flags & PHP_HTTP_URL_SANITIZE_PATH)
+ && url(buf)->path
&& url(buf)->path[0] && url(buf)->path[1]) {
char *ptr, *end = url(buf)->path + strlen(url(buf)->path) + 1;
&& url(buf)->path[0] && url(buf)->path[1]) {
char *ptr, *end = url(buf)->path + strlen(url(buf)->path) + 1;
@@
-1467,7
+1468,7
@@
static const char *parse_scheme(struct parse_state *state)
case '7': case '8': case '9':
case '+': case '-': case '.':
if (state->ptr == tmp) {
case '7': case '8': case '9':
case '+': case '-': case '.':
if (state->ptr == tmp) {
-
return tmp
;
+
goto softfail
;
}
/* no break */
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
}
/* no break */
case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G':
@@
-1484,19
+1485,20
@@
static const char *parse_scheme(struct parse_state *state)
default:
if (!(mb = parse_mb(state, PARSE_SCHEME, state->ptr, state->end, tmp, 1))) {
default:
if (!(mb = parse_mb(state, PARSE_SCHEME, state->ptr, state->end, tmp, 1))) {
- /* soft fail; parse path next */
- return tmp;
+ goto softfail;
}
state->ptr += mb - 1;
}
} while (++state->ptr != state->end);
}
state->ptr += mb - 1;
}
} while (++state->ptr != state->end);
+softfail:
+ state->offset = 0;
return state->ptr = tmp;
}
php_http_url_t *php_http_url_parse(const char *str, size_t len, unsigned flags)
{
return state->ptr = tmp;
}
php_http_url_t *php_http_url_parse(const char *str, size_t len, unsigned flags)
{
- size_t maxlen = 3 * len;
+ size_t maxlen = 3 * len
+ 8 /* null bytes for all components */
;
struct parse_state *state = ecalloc(1, sizeof(*state) + maxlen);
state->end = str + len;
struct parse_state *state = ecalloc(1, sizeof(*state) + maxlen);
state->end = str + len;