From 7e4bd9fb606a1564390e3b5359e13f21bc1a963f Mon Sep 17 00:00:00 2001 From: Andrei Zmievski Date: Thu, 9 Dec 1999 23:45:30 +0000 Subject: [PATCH] (PHP strtoupper, strtolower, substr_replace) Made binary-safe. @Made strtoupper(), strtolower(), substr_replace() binary-safe. (Andrei) --- TODO | 3 --- ext/ldap/ldap.c | 4 +++- ext/standard/php_string.h | 4 ++-- ext/standard/string.c | 22 ++++++++++++---------- ext/xml/xml.c | 2 +- 5 files changed, 18 insertions(+), 17 deletions(-) diff --git a/TODO b/TODO index 47ecd11c5d..3749336e49 100644 --- 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() diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 0ca3d18c40..45f3494dbc 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -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++; diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h index 93e4ab18c1..2f9041491d 100644 --- a/ext/standard/php_string.h +++ b/ext/standard/php_string.h @@ -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); diff --git a/ext/standard/string.c b/ext/standard/string.c index 84665836a8..53b6a9063a 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -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; ivalue.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; ivalue.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); } /* }}} */ diff --git a/ext/xml/xml.c b/ext/xml/xml.c index 7547a9bff2..15f1638c56 100644 --- a/ext/xml/xml.c +++ b/ext/xml/xml.c @@ -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) { -- 2.40.0