diff options
author | Sascha Schumann <sas@php.net> | 2002-03-04 18:46:55 +0000 |
---|---|---|
committer | Sascha Schumann <sas@php.net> | 2002-03-04 18:46:55 +0000 |
commit | b4d5aa5c50500b2cb2904c62ae8aca6c0f392cfb (patch) | |
tree | 9ccdc47145e62d78bf0e20a82ef74d4f21b244f8 | |
parent | f79e39cf56f82cdad8684b6bc8af688ce59787bd (diff) | |
download | php-git-b4d5aa5c50500b2cb2904c62ae8aca6c0f392cfb.tar.gz |
Supply php_html_puts which escapes a whole string.. now fully works in ZTS
mode, too.
-rw-r--r-- | ext/standard/info.c | 11 | ||||
-rw-r--r-- | main/main.c | 40 | ||||
-rw-r--r-- | main/php_ini.c | 4 | ||||
-rw-r--r-- | main/php_main.h | 2 |
4 files changed, 50 insertions, 7 deletions
diff --git a/ext/standard/info.c b/ext/standard/info.c index c5b50ccc9c..3c95048b94 100644 --- a/ext/standard/info.c +++ b/ext/standard/info.c @@ -74,7 +74,7 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC) PUTS("[\""); switch (zend_hash_get_current_key(Z_ARRVAL_PP(data), &string_key, &num_key, 0)) { case HASH_KEY_IS_STRING: - zend_html_puts(string_key, strlen(string_key)); + php_html_puts(string_key, strlen(string_key) TSRMLS_CC); break; case HASH_KEY_IS_LONG: php_printf("%ld", num_key); @@ -89,10 +89,10 @@ static void php_print_gpcse_array(char *name, uint name_length TSRMLS_DC) tmp2 = **tmp; zval_copy_ctor(&tmp2); convert_to_string(&tmp2); - zend_html_puts(Z_STRVAL(tmp2), Z_STRLEN(tmp2)); + php_html_puts(Z_STRVAL(tmp2), Z_STRLEN(tmp2) TSRMLS_CC); zval_dtor(&tmp2); } else { - zend_html_puts(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp)); + php_html_puts(Z_STRVAL_PP(tmp), Z_STRLEN_PP(tmp) TSRMLS_CC); } PUTS(" </td></tr>\n"); zend_hash_move_forward(Z_ARRVAL_PP(data)); @@ -226,7 +226,7 @@ PHPAPI void php_print_info(int flag TSRMLS_DC) PUTS("?="ZEND_LOGO_GUID"\" border=\"0\" align=\"right\" alt=\"Zend logo\"></a>\n"); } php_printf("This program makes use of the Zend Scripting Language Engine:<br />"); - zend_html_puts(zend_version, strlen(zend_version)); + php_html_puts(zend_version, strlen(zend_version) TSRMLS_CC); php_info_print_box_end(); efree(php_uname); } @@ -404,6 +404,7 @@ PHPAPI void php_info_print_table_row(int num_cols, ...) int i; va_list row_elements; char *row_element; + TSRMLS_FETCH(); va_start(row_elements, num_cols); @@ -417,7 +418,7 @@ PHPAPI void php_info_print_table_row(int num_cols, ...) if (!row_element || !*row_element) { php_printf(" "); } else { - zend_html_puts(row_element, strlen(row_element)); + php_html_puts(row_element, strlen(row_element) TSRMLS_CC); } php_printf("%s</td>", (i==0?"</b>":"")); diff --git a/main/main.c b/main/main.c index ea3fcbaba1..041bb39bee 100644 --- a/main/main.c +++ b/main/main.c @@ -359,6 +359,46 @@ PHPAPI int php_printf(const char *format, ...) } /* }}} */ +/* {{{ php_html_puts */ +#include "ext/standard/php_smart_str.h" + +PHPAPI void php_html_puts(const char *str, uint size TSRMLS_DC) +{ + const char *estr; + smart_str s = {0}; + + for (estr = str + size; str < estr; str++) { + switch (*str) { + case '\n': + smart_str_appendl(&s, "<br />", sizeof("<br />")-1); + break; + case '<': + smart_str_appends(&s, "<"); + break; + case '>': + smart_str_appends(&s, ">"); + break; + case '&': + smart_str_appends(&s, "&"); + break; + case ' ': + smart_str_appendl(&s, " ", sizeof(" ")-1); + break; + case '\t': + smart_str_appends(&s, " "); + break; + default: + smart_str_appendc(&s, *str); + } + } + + if (s.c) { + PHPWRITE(s.c, s.len); + smart_str_free(&s); + } +} +/* }}} */ + /* {{{ php_error_cb extended error handling function */ static void php_error_cb(int type, const char *error_filename, const uint error_lineno, const char *format, va_list args) diff --git a/main/php_ini.c b/main/php_ini.c index 975cf0b9a2..3ec52e0037 100644 --- a/main/php_ini.c +++ b/main/php_ini.c @@ -49,6 +49,7 @@ static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type) } else { char *display_string; uint display_string_length, esc_html=0; + TSRMLS_FETCH(); if (type==ZEND_INI_DISPLAY_ORIG && ini_entry->modified) { if (ini_entry->orig_value && ini_entry->orig_value[0]) { @@ -68,9 +69,8 @@ static void php_ini_displayer_cb(zend_ini_entry *ini_entry, int type) display_string_length = sizeof("<i>no value</i>")-1; } if(esc_html) { - zend_html_puts(display_string, display_string_length); + php_html_puts(display_string, display_string_length TSRMLS_CC); } else { - TSRMLS_FETCH(); PHPWRITE(display_string, display_string_length); } } diff --git a/main/php_main.h b/main/php_main.h index ea9137c5f8..0ae80136cd 100644 --- a/main/php_main.h +++ b/main/php_main.h @@ -45,6 +45,8 @@ PHPAPI int php_lint_script(zend_file_handle *file TSRMLS_DC); PHPAPI void php_handle_aborted_connection(void); PHPAPI int php_handle_auth_data(const char *auth TSRMLS_DC); +PHPAPI void php_html_puts(const char *str, uint siz TSRMLS_DC); + extern void php_call_shutdown_functions(void); /* environment module */ |