iliaa           Mon Dec  5 22:09:25 2005 EDT

  Modified files:              (Branch: PHP_5_1)
    /php-src    NEWS 
    /php-src/main       main.c 
  Log:
  Fixed possible XSS inside error reporting functionality.
  
  
http://cvs.php.net/diff.php/php-src/NEWS?r1=1.2027.2.275&r2=1.2027.2.276&ty=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.275 php-src/NEWS:1.2027.2.276
--- php-src/NEWS:1.2027.2.275   Mon Dec  5 12:27:02 2005
+++ php-src/NEWS        Mon Dec  5 22:09:23 2005
@@ -18,6 +18,7 @@
   . Fixed isset/empty/(bool) behavior
   . Fixed iterator edge cases
   . Added methods getNamespaces(), getDocNamespaces()
+- Fixed possible XSS inside error reporting functionality. (Ilia)
 - Fixed many bugs in OCI8. (Tony)
 - Fixed crash and leak in mysqli when using 4.1.x client libraries and
   connecting to 5.x server. (Andrey)
http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.640.2.9&r2=1.640.2.10&ty=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.640.2.9 php-src/main/main.c:1.640.2.10
--- php-src/main/main.c:1.640.2.9       Mon Dec  5 20:05:55 2005
+++ php-src/main/main.c Mon Dec  5 22:09:24 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c,v 1.640.2.9 2005/12/06 01:05:55 sniper Exp $ */
+/* $Id: main.c,v 1.640.2.10 2005/12/06 03:09:24 iliaa Exp $ */
 
 /* {{{ includes
  */
@@ -433,6 +433,7 @@
        char *space;
        char *class_name = get_active_class_name(&space TSRMLS_CC);
        char *function;
+       int origin_len;
        char *origin;
        char *message;
        int is_function = 0;
@@ -490,9 +491,16 @@
 
        /* if we still have memory then format the origin */
        if (is_function) {
-               spprintf(&origin, 0, "%s%s%s(%s)", class_name, space, function, 
params);        
+               origin_len = spprintf(&origin, 0, "%s%s%s(%s)", class_name, 
space, function, params);   
        } else {
-               spprintf(&origin, 0, "%s", function);   
+               origin_len = spprintf(&origin, 0, "%s", function);      
+       }
+
+       if (PG(html_errors)) {
+               int len;
+               char *replace = php_escape_html_entities(origin, origin_len, 
&len, 0, ENT_COMPAT, NULL TSRMLS_CC);
+               efree(origin);
+               origin = replace;
        }
 
        /* origin and buffer available, so lets come up with the error message 
*/
@@ -761,10 +769,17 @@
                        } else {
                                char *prepend_string = 
INI_STR("error_prepend_string");
                                char *append_string = 
INI_STR("error_append_string");
-                               char *error_format = PG(html_errors) ?
-                                       "%s<br />\n<b>%s</b>:  %s in <b>%s</b> 
on line <b>%d</b><br />\n%s"
-                                       : "%s\n%s: %s in %s on line %d\n%s";    
-                               php_printf(error_format, 
STR_PRINT(prepend_string), error_type_str, buffer, error_filename, 
error_lineno, STR_PRINT(append_string));
+
+                               if (PG(html_errors)) {
+                                       char *buf, *buf2;
+                                       int len2, len = spprintf(&buf, 0, 
"%s<br />\n<b>%s</b>:  %s in <b>%s</b> on line <b>%d</b><br />\n%s", 
STR_PRINT(prepend_string), error_type_str, buffer, error_filename, 
error_lineno, STR_PRINT(append_string));
+                                       buf2 = php_escape_html_entities(buf, 
len, &len2, 0, ENT_COMPAT, NULL TSRMLS_CC);
+                                       php_printf("%s", buf2);
+                                       efree(buf);
+                                       efree(buf2);
+                               } else {
+                                       php_printf("%s\n%s: %s in %s on line 
%d\n%s", STR_PRINT(prepend_string), error_type_str, buffer, error_filename, 
error_lineno, STR_PRINT(append_string));
+                               }
                        }
                }
 #if ZEND_DEBUG

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to