summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMoriyoshi Koizumi <moriyoshi@php.net>2003-02-24 22:01:12 +0000
committerMoriyoshi Koizumi <moriyoshi@php.net>2003-02-24 22:01:12 +0000
commit385a809694ef2532108720832bec5c12a983706c (patch)
tree54279d9160fe3361c963d78ed89e210c53e94c2b
parent85a5ef3ec99aebdc0a94d239d27c5c46ba798744 (diff)
downloadphp-git-385a809694ef2532108720832bec5c12a983706c.tar.gz
Made strip_tags() binary safe
-rw-r--r--ext/standard/php_string.h2
-rw-r--r--ext/standard/string.c9
2 files changed, 7 insertions, 4 deletions
diff --git a/ext/standard/php_string.h b/ext/standard/php_string.h
index 18e53afe27..8b032847aa 100644
--- a/ext/standard/php_string.h
+++ b/ext/standard/php_string.h
@@ -129,7 +129,7 @@ PHPAPI char *php_str_to_str_ex(char *haystack, int length, char *needle,
PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,
int needle_len, char *str, int str_len, int *_new_length);
PHPAPI char *php_trim(char *c, int len, char *what, int what_len, zval *return_value, int mode TSRMLS_DC);
-PHPAPI void php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len);
+PHPAPI size_t php_strip_tags(char *rbuf, int len, int *state, char *allow, int allow_len);
PHPAPI int php_char_to_str(char *str, uint len, char from, char *to, int to_len, pval *result);
PHPAPI void php_implode(zval *delim, zval *arr, zval *return_value);
PHPAPI void php_explode(zval *delim, zval *str, zval *return_value, int limit);
diff --git a/ext/standard/string.c b/ext/standard/string.c
index 7a188f9cae..77966c9726 100644
--- a/ext/standard/string.c
+++ b/ext/standard/string.c
@@ -3299,6 +3299,7 @@ PHP_FUNCTION(strip_tags)
zval **str, **allow=NULL;
char *allowed_tags=NULL;
int allowed_tags_len=0;
+ size_t retval_len;
switch (ZEND_NUM_ARGS()) {
case 1:
@@ -3320,8 +3321,8 @@ PHP_FUNCTION(strip_tags)
}
convert_to_string_ex(str);
buf = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
- php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len);
- RETURN_STRING(buf, 0);
+ retval_len = php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len);
+ RETURN_STRINGL(buf, retval_len, 0);
}
/* }}} */
@@ -3555,7 +3556,7 @@ int php_tag_find(char *tag, int len, char *set) {
swm: Added ability to strip <?xml tags without assuming it PHP
code.
*/
-PHPAPI void php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len)
+PHPAPI size_t php_strip_tags(char *rbuf, int len, int *stateptr, char *allow, int allow_len)
{
char *tbuf, *buf, *p, *tp, *rp, c, lc;
int br, i=0, depth=0;
@@ -3751,6 +3752,8 @@ reg_char:
efree(tbuf);
if (stateptr)
*stateptr = state;
+
+ return (size_t)(rp - rbuf);
}
/* }}} */