X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=src%2Fphp_http_version.c;h=c861a6470a2ba084a5502e3066193547e43967c8;hp=7adef9d3c897ce66f5923b981c74bd3b46a992d0;hb=ee21a57095f838337945bd3d2e19bd20bdfee3ea;hpb=e67b70752bcc37ccf96d512a81799298f707682e diff --git a/src/php_http_version.c b/src/php_http_version.c index 7adef9d..c861a64 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 TSRMLS_CC, E_NOTICE, "Non-standard version separator '%c' in HTTP protocol version '%s'", separator, ptr - 2); - } + switch (separator) { + default: + php_error_docref(NULL TSRMLS_CC, 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 TSRMLS_CC); + break; + + case ' ': + if (major > 1) { + minor = 0; + } else { + goto error; } } + if (minor >= 0 && minor <= 9) { + return php_http_version_init(v, major, minor TSRMLS_CC); + } } } + error: php_error_docref(NULL TSRMLS_CC, E_WARNING, "Could not parse HTTP protocol version '%s'", str); return NULL; }