]> granicus.if.org Git - php/commitdiff
(PHP strtoupper, strtolower, substr_replace) Made binary-safe.
authorAndrei Zmievski <andrei@php.net>
Thu, 9 Dec 1999 23:45:30 +0000 (23:45 +0000)
committerAndrei Zmievski <andrei@php.net>
Thu, 9 Dec 1999 23:45:30 +0000 (23:45 +0000)
@Made strtoupper(), strtolower(), substr_replace() binary-safe. (Andrei)

TODO
ext/ldap/ldap.c
ext/standard/php_string.h
ext/standard/string.c
ext/xml/xml.c

diff --git a/TODO b/TODO
index 47ecd11c5db96a7d85ecaca72d30dee06be6da10..3749336e4966d971a65ac2c761a0172a77861a89 100644 (file)
--- a/TODO
+++ b/TODO
@@ -29,15 +29,12 @@ ext/standard
                strcspn()
                implode()
                strtok()
-               strtoupper()
-               strtolower()
                basename()
                dirname()
                stristr()
                strstr()
                strrpos()
                strrchr()
-               substr_replace()
                quotemeta()
                ucwords()
                strip_tags()
index 0ca3d18c40dc4a37f227c5a45cbaaae8ffc015f8..45f3494dbcf04c858da7ce20bb38f0d1d4175184 100644 (file)
@@ -774,6 +774,7 @@ PHP_FUNCTION(ldap_get_entries)
        int attr_count, entry_count;
        BerElement *ber;
        char *attribute;
+       size_t attr_len;
        char **ldap_value;
        char *dn;
 
@@ -826,7 +827,8 @@ PHP_FUNCTION(ldap_get_entries)
                        }       
                        ldap_value_free(ldap_value);
 
-                       zend_hash_update(tmp1->value.ht, php_strtolower(attribute), strlen(attribute)+1, (void *) &tmp2, sizeof(pval *), NULL);
+                       attr_len = strlen(attribute);
+                       zend_hash_update(tmp1->value.ht, php_strtolower(attribute, attr_len), attr_len+1, (void *) &tmp2, sizeof(pval *), NULL);
                        add_index_string(tmp1, attr_count, attribute, 1);
 
                        attr_count++;
index 93e4ab18c1036b136f8836724e57b3b84f64c276..2f9041491d4ed62d34516c278a48bdd5a7d8e935 100644 (file)
@@ -84,8 +84,8 @@ PHP_FUNCTION(strip_tags);
 PHP_FUNCTION(str_repeat);
 PHP_FUNCTION(substr_replace);
 
-extern PHPAPI char *php_strtoupper(char *s);
-extern PHPAPI char *php_strtolower(char *s);
+extern PHPAPI char *php_strtoupper(char *s, size_t len);
+extern PHPAPI char *php_strtolower(char *s, size_t len);
 extern PHPAPI char *php_strtr(char *string, int len, char *str_from, char *str_to, int trlen);
 extern PHPAPI char *php_addslashes(char *string, int length, int *new_length, int freeit);
 extern PHPAPI char *php_addcslashes(char *string, int length, int *new_length, int freeit, char *what, int wlength);
index 84665836a8cde010622ca9de2859c6a00912f63d..53b6a9063a044daafcb459e16f37926af9c84665 100644 (file)
@@ -389,13 +389,14 @@ PHP_FUNCTION(strtok)
 }
 /* }}} */
 
-PHPAPI char *php_strtoupper(char *s)
+PHPAPI char *php_strtoupper(char *s, size_t len)
 {
        char *c;
        int ch;
+       int i;
 
        c = s;
-       while (*c) {
+       for (i=0; i<len; i++) {
                ch = toupper((unsigned char)*c);
                *c++ = ch;
        }
@@ -415,18 +416,18 @@ PHP_FUNCTION(strtoupper)
 
        *return_value = **arg;
        zval_copy_ctor(return_value);
-       php_strtoupper(return_value->value.str.val);
+       php_strtoupper(return_value->value.str.val, return_value->value.str.len);
 }
 /* }}} */
 
 
-PHPAPI char *php_strtolower(char *s)
+PHPAPI char *php_strtolower(char *s, size_t len)
 {
        register int ch;
        char *c;
 
        c = s;
-       while (*c) {
+       for (i=0; i<len; i++) {
                ch = tolower((unsigned char)*c);
                *c++ = ch;
        }
@@ -447,7 +448,7 @@ PHP_FUNCTION(strtolower)
 
        *return_value = **str;
        zval_copy_ctor(return_value);
-       ret = php_strtolower(return_value->value.str.val);
+       ret = php_strtolower(return_value->value.str.val, return_value->value.str.len);
 }
 /* }}} */
 
@@ -933,11 +934,12 @@ PHP_FUNCTION(substr_replace)
        result_len = (*string)->value.str.len - l + (*repl)->value.str.len;
        result = (char *)ecalloc(result_len + 1, sizeof(char *));
 
-       strncat(result, (*string)->value.str.val, f);
-       strcat(result, (*repl)->value.str.val);
-       strcat(result, (*string)->value.str.val + f + l);
+       memcpy(result, (*string)->value.str.val, f);
+       memcpy(&result[f], (*repl)->value.str.val, (*repl)->value.str.len);
+       memcpy(&result[f + (*repl)->value.str.len], (*string)->value.str.val + f + l,
+          (*string)->value.str.len - f - l);
 
-       RETVAL_STRING(result, 0);
+       RETVAL_STRINGL(result, result_len, 0);
 }
 /* }}} */
 
index 7547a9bff2fc62cb426f90c6776b9b0a4a580289..15f1638c562abc71a1a29319e8f6184860e48b0f 100644 (file)
@@ -628,7 +628,7 @@ void _xml_startElementHandler(void *userData, const char *name,
                parser->level++;
 
                if (parser->case_folding) {
-                       name = php_strtoupper(estrdup(name));
+                       name = php_strtoupper(estrdup(name), strlen(name));
                }
 
                if (parser->startElementHandler) {