summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSascha Schumann <sas@php.net>2002-03-04 18:46:55 +0000
committerSascha Schumann <sas@php.net>2002-03-04 18:46:55 +0000
commitb4d5aa5c50500b2cb2904c62ae8aca6c0f392cfb (patch)
tree9ccdc47145e62d78bf0e20a82ef74d4f21b244f8
parentf79e39cf56f82cdad8684b6bc8af688ce59787bd (diff)
downloadphp-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.c11
-rw-r--r--main/main.c40
-rw-r--r--main/php_ini.c4
-rw-r--r--main/php_main.h2
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("&nbsp;</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("&nbsp;");
} 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, "&lt;");
+ break;
+ case '>':
+ smart_str_appends(&s, "&gt;");
+ break;
+ case '&':
+ smart_str_appends(&s, "&amp;");
+ break;
+ case ' ':
+ smart_str_appendl(&s, "&nbsp;", sizeof("&nbsp;")-1);
+ break;
+ case '\t':
+ smart_str_appends(&s, "&nbsp;&nbsp;&nbsp;&nbsp;");
+ 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 */