summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Zmievski <andrei@php.net>1999-12-09 23:45:30 +0000
committerAndrei Zmievski <andrei@php.net>1999-12-09 23:45:30 +0000
commit7e4bd9fb606a1564390e3b5359e13f21bc1a963f (patch)
tree76f95b18ccb433582d24f6661f6025302c9e9740
parent2a794e8205363e0ef5aea8800c8f04b2b381a03a (diff)
downloadphp-git-7e4bd9fb606a1564390e3b5359e13f21bc1a963f.tar.gz
(PHP strtoupper, strtolower, substr_replace) Made binary-safe.
@Made strtoupper(), strtolower(), substr_replace() binary-safe. (Andrei)
-rw-r--r--TODO3
-rw-r--r--ext/ldap/ldap.c4
-rw-r--r--ext/standard/php_string.h4
-rw-r--r--ext/standard/string.c22
-rw-r--r--ext/xml/xml.c2
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; 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);
}
/* }}} */
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) {