X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=src%2Fphp_http_version.c;h=7f7d34245384f000376d2ba6f1725dac3131c466;hp=e763a855a12169a6df342e49b2316c5e41793b21;hb=e1d5ca36e13696a2e87b618165669fc7c53709c1;hpb=a651c2f69a88b90c392fcc8f29564b4d72a1e683 diff --git a/src/php_http_version.c b/src/php_http_version.c index e763a85..7f7d342 100644 --- a/src/php_http_version.c +++ b/src/php_http_version.c @@ -44,18 +44,29 @@ php_http_version_t *php_http_version_parse(php_http_version_t *v, const char *st major = *ptr++ - '0'; if (major >= 0 && major <= 9) { separator = *ptr++; - if (separator) { - if (separator != '.' && separator != ',') { - php_error_docref(NULL, E_NOTICE, "Non-standard version separator '%c' in HTTP protocol version '%s'", separator, ptr - 2); - } + switch (separator) { + default: + php_error_docref(NULL, E_NOTICE, "Non-standard version separator '%c' in HTTP protocol version '%s'", separator, ptr - 2); + /* no break */ + case '.': + case ',': minor = *ptr - '0'; - if (minor >= 0 && minor <= 9) { - return php_http_version_init(v, major, minor); + break; + + case ' ': + if (major > 1) { + minor = 0; + } else { + goto error; } } + if (minor >= 0 && minor <= 9) { + return php_http_version_init(v, major, minor); + } } } + error: php_error_docref(NULL, E_WARNING, "Could not parse HTTP protocol version '%s'", str); return NULL; }