]> granicus.if.org Git - php/commitdiff
Make state parameter of php_strip_tags passed by reference.
authorWez Furlong <wez@php.net>
Wed, 20 Mar 2002 14:38:13 +0000 (14:38 +0000)
committerWez Furlong <wez@php.net>
Wed, 20 Mar 2002 14:38:13 +0000 (14:38 +0000)
Move state tracking to stream structure.

ext/standard/file.c
ext/standard/file.h
ext/standard/php_string.h
ext/standard/string.c
ext/zlib/zlib.c
main/php_streams.h

index cf76315f2bc83d9265733742c7383f1054ed7897..0a6d1716a9043fb59457bc9b49e8bdc7a7d3b340 100644 (file)
@@ -124,7 +124,6 @@ PHPAPI int php_file_le_stream(void)
 static void file_globals_ctor(php_file_globals *file_globals_p TSRMLS_DC)
 {
        zend_hash_init(&FG(ht_persistent_socks), 0, NULL, NULL, 1);
-       FG(fgetss_state) = 0;
        FG(pclose_ret) = 0;
        FG(def_chunk_size) = PHP_SOCK_CHUNK_SIZE;
 }
@@ -592,7 +591,6 @@ PHP_NAMED_FUNCTION(php_if_fopen)
        if (stream == NULL)     {
                RETURN_FALSE;
        }
-       FG(fgetss_state) = 0;
 
        php_stream_to_zval(stream, return_value);
 
@@ -973,7 +971,7 @@ PHP_FUNCTION(fgetss)
        zval **fd, **bytes, **allow=NULL;
        int len, type;
        char *buf;
-       void *what;
+       php_stream *stream;
        char *allowed_tags=NULL;
        int allowed_tags_len=0;
 
@@ -997,8 +995,8 @@ PHP_FUNCTION(fgetss)
                break;
        }
 
-       what = zend_fetch_resource(fd TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
-       ZEND_VERIFY_RESOURCE(what);
+       stream = zend_fetch_resource(fd TSRMLS_CC, -1, "File-Handle", &type, 1, le_stream);
+       ZEND_VERIFY_RESOURCE(stream);
 
        convert_to_long_ex(bytes);
        len = Z_LVAL_PP(bytes);
@@ -1011,13 +1009,13 @@ PHP_FUNCTION(fgetss)
        /*needed because recv doesnt set null char at end*/
        memset(buf, 0, len + 1);
 
-       if (php_stream_gets((php_stream *) what, buf, len) == NULL)     {
+       if (php_stream_gets(stream, buf, len) == NULL)  {
                efree(buf);
                RETURN_FALSE;
        }
 
        /* strlen() can be used here since we are doing it on the return of an fgets() anyway */
-       php_strip_tags(buf, strlen(buf), FG(fgetss_state), allowed_tags, allowed_tags_len);
+       php_strip_tags(buf, strlen(buf), &stream->fgetss_state, allowed_tags, allowed_tags_len);
 
        RETURN_STRING(buf, 0);
 }
index 54d63469d15c7932849bfe0ed951dbb6de32f13e..ec17259ea438ef5c55c45c7f44a88a492f3c8798 100644 (file)
@@ -105,7 +105,6 @@ typedef struct _php_meta_tags_data {
 php_meta_tags_token php_next_meta_token(php_meta_tags_data * TSRMLS_DC);
 
 typedef struct {
-  int fgetss_state;
   int pclose_ret;
   HashTable ht_persistent_socks;
   size_t def_chunk_size;
index 5f5a47dae447a6baf7232c989860f3a24ab222de..8dfbb4704a3f13339820203a68dd90748d91bd45 100644 (file)
@@ -115,7 +115,7 @@ PHPAPI char *php_str_to_str(char *haystack, int length, char *needle,
                int needle_len, char *str, int str_len, int *_new_length);
 PHPAPI void php_trim(zval **str, zval *return_value, int mode TSRMLS_DC);
 PHPAPI void php_trim2(zval **str, zval **what, zval *return_value, int mode TSRMLS_DC);
-PHPAPI void php_strip_tags(char *rbuf, int len, int state, char *allow, int allow_len);
+PHPAPI void 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);
 
index 09b2e4694177012093b5e3461a5a8647a561611f..7c3ade6e4ed6261cfdb4242ec450ee7f8cb07d71 100644 (file)
@@ -3095,7 +3095,7 @@ 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), 0, allowed_tags, allowed_tags_len);
+       php_strip_tags(buf, Z_STRLEN_PP(str), NULL, allowed_tags, allowed_tags_len);
        RETURN_STRING(buf, 0);
 }
 /* }}} */
@@ -3286,10 +3286,14 @@ 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 state, char *allow, int allow_len)
+PHPAPI void 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;
+       int state;
+
+       if (stateptr)
+               state = *stateptr;
 
        buf = estrndup(rbuf, len);
        c = *buf;
@@ -3417,6 +3421,8 @@ PHPAPI void php_strip_tags(char *rbuf, int len, int state, char *allow, int allo
        *rp = '\0';
        efree(buf);
        if(allow) efree(tbuf);
+       if (stateptr)
+               *stateptr = state;
 }
 /* }}} */
 
index 9c46953f831f074530c4eca69d32186543a8a880..ce5b67ffdff01eefe581f54f2e1dc8907e9ed6fe 100644 (file)
@@ -517,7 +517,7 @@ PHP_FUNCTION(gzgetss)
        }
 
        /* strlen() can be used here since we are doing it on the return of an fgets() anyway */
-       php_strip_tags(buf, strlen(buf), ZLIBG(gzgetss_state), allowed_tags, allowed_tags_len);
+       php_strip_tags(buf, strlen(buf), &ZLIBG(gzgetss_state), allowed_tags, allowed_tags_len);
        RETURN_STRING(buf, 0);
        
 }
index 4a63edcd5c395909a84499a1bd2c64895d3b836d..efce5adcef284fd6af8ed4910c1e7e0f5d168329 100755 (executable)
@@ -118,6 +118,7 @@ struct _php_stream  {
        void *wrapperthis;              /* convenience pointer for a instance of a wrapper */
        zval *wrapperdata;              /* fgetwrapperdata retrieves this */
 
+       int fgetss_state;               /* for fgetss to handle multiline tags */
        int is_persistent;
        char mode[16];                  /* "rwb" etc. ala stdio */
        int rsrc_id;                    /* used for auto-cleanup */