X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_headers_api.c;h=c04664e9b486afd21ea5971309c7767ee52e1e96;hp=c4d23c8a17824d1d172d88a033f74f4769dbf106;hb=d19eb84fa85cc82c46b943b49d906714e0a9b3c5;hpb=a0bca521b491711e43aef74fe19c23a8eb4d0777 diff --git a/http_headers_api.c b/http_headers_api.c index c4d23c8..c04664e 100644 --- a/http_headers_api.c +++ b/http_headers_api.c @@ -15,18 +15,14 @@ #ifdef HAVE_CONFIG_H # include "config.h" #endif -#include "php.h" -#include "ext/standard/php_string.h" +#include "php_http.h" + #include "ext/standard/url.h" +#include "ext/standard/php_string.h" -#include "php_http.h" -#include "php_http_std_defs.h" #include "php_http_api.h" #include "php_http_headers_api.h" -#include "php_http_info_api.h" - -#include ZEND_EXTERN_MODULE_GLOBALS(http); @@ -86,7 +82,7 @@ char *_http_negotiate_language_func(const char *test, double *quality, HashTable FOREACH_HASH_VAL(pos, supported, value) { int len = dash_test - test; #if HTTP_DBG_NEG - fprintf(stderr, "strncascmp('%s', '%s', %d)\n", Z_STRVAL_PP(value), test, len); + fprintf(stderr, "strncasecmp('%s', '%s', %d)\n", Z_STRVAL_PP(value), test, len); #endif if ( (!strncasecmp(Z_STRVAL_PP(value), test, len)) && ( (Z_STRVAL_PP(value)[len] == '\0') || @@ -153,8 +149,9 @@ PHP_HTTP_API HashTable *_http_negotiate_q(const char *header, HashTable *support array_init(&array); FOREACH_HASH_VAL(pos, Z_ARRVAL(ex_arr), entry) { + int ident_len; double quality; - char *selected, *identifier; + char *selected, *identifier, *freeme; const char *separator; #if HTTP_DBG_NEG @@ -164,13 +161,22 @@ PHP_HTTP_API HashTable *_http_negotiate_q(const char *header, HashTable *support if ((separator = strchr(Z_STRVAL_PP(entry), ';'))) { const char *ptr = separator; - while (*++ptr && !isdigit(*ptr)); + while (*++ptr && !isdigit(*ptr) && '.' != *ptr); quality = atof(ptr); - identifier = estrndup(Z_STRVAL_PP(entry), separator - Z_STRVAL_PP(entry)); + identifier = estrndup(Z_STRVAL_PP(entry), ident_len = separator - Z_STRVAL_PP(entry)); } else { quality = 1000.0 - i++; - identifier = estrndup(Z_STRVAL_PP(entry), Z_STRLEN_PP(entry)); + identifier = estrndup(Z_STRVAL_PP(entry), ident_len = Z_STRLEN_PP(entry)); + } + freeme = identifier; + + while (isspace(*identifier)) { + ++identifier; + --ident_len; + } + while (ident_len && isspace(identifier[ident_len - 1])) { + identifier[--ident_len] = '\0'; } if ((selected = neg(identifier, &quality, supported TSRMLS_CC))) { @@ -180,7 +186,7 @@ PHP_HTTP_API HashTable *_http_negotiate_q(const char *header, HashTable *support } } - efree(identifier); + efree(freeme); } result = Z_ARRVAL(array);