]> granicus.if.org Git - php/commitdiff
Fixed get_browser()
authorDmitry Stogov <dmitry@zend.com>
Mon, 17 Mar 2014 20:55:25 +0000 (00:55 +0400)
committerDmitry Stogov <dmitry@zend.com>
Mon, 17 Mar 2014 20:55:25 +0000 (00:55 +0400)
ext/standard/browscap.c

index 0ce985a1dbc42c2bc0a8a277223d8ab5df9acf40..e4d3c564c738f4e19cfd8a3a1a9ae0076a79f35e 100644 (file)
@@ -81,19 +81,20 @@ static void convert_browscap_pattern(zval *pattern, int persistent) /* {{{ */
        int i, j=0;
        char *t;
        zend_string *res;
+       char *lc_pattern;
 
        // TODO: overflow check???
 //???  t = (char *) safe_pemalloc(Z_STRLEN_P(pattern), 2, 5, persistent);
        res = STR_ALLOC(Z_STRLEN_P(pattern) * 2 + 5, persistent);
        t = res->val;
 
-       php_strtolower(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern));
+       lc_pattern = zend_str_tolower_dup(Z_STRVAL_P(pattern), Z_STRLEN_P(pattern));
 
        t[j++] = '\xA7'; /* section sign */
        t[j++] = '^';
 
        for (i=0; i<Z_STRLEN_P(pattern); i++, j++) {
-               switch (Z_STRVAL_P(pattern)[i]) {
+               switch (lc_pattern[i]) {
                        case '?':
                                t[j] = '.';
                                break;
@@ -122,7 +123,7 @@ static void convert_browscap_pattern(zval *pattern, int persistent) /* {{{ */
                                t[j] = '\xA7';
                                break;
                        default:
-                               t[j] = Z_STRVAL_P(pattern)[i];
+                               t[j] = lc_pattern[i];
                                break;
                }
        }
@@ -133,6 +134,7 @@ static void convert_browscap_pattern(zval *pattern, int persistent) /* {{{ */
        t[j]=0;
        res->len = j;
        Z_STR_P(pattern) = res;
+       efree(lc_pattern);
 }
 /* }}} */