X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=http_headers_api.c;h=3cb9c9128626e48c4912c4deb665cd352c19f6b5;hp=c4d23c8a17824d1d172d88a033f74f4769dbf106;hb=930417f55598b5b4c54b44e20935450210454fdf;hpb=5de7bf562f55eae49d3424670ad56f68458ad7f1 diff --git a/http_headers_api.c b/http_headers_api.c index c4d23c8..3cb9c91 100644 --- a/http_headers_api.c +++ b/http_headers_api.c @@ -86,7 +86,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 +153,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 +165,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 (isspace(identifier[ident_len - 1])) { + identifier[--ident_len] = '\0'; } if ((selected = neg(identifier, &quality, supported TSRMLS_CC))) { @@ -180,7 +190,7 @@ PHP_HTTP_API HashTable *_http_negotiate_q(const char *header, HashTable *support } } - efree(identifier); + efree(freeme); } result = Z_ARRVAL(array);