sas             Thu Apr  3 13:19:15 2003 EDT

  Modified files:              
    /php4/main  output.c 
  Log:
  Add some checks and avoid passing invalid data to call_user_function_ex.
  
  Fixes some heap corruption and allocation of negative amounts of memory.
  
  
Index: php4/main/output.c
diff -u php4/main/output.c:1.152 php4/main/output.c:1.153
--- php4/main/output.c:1.152    Wed Apr  2 19:50:17 2003
+++ php4/main/output.c  Thu Apr  3 13:19:15 2003
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: output.c,v 1.152 2003/04/03 00:50:17 moriyoshi Exp $ */
+/* $Id: output.c,v 1.153 2003/04/03 18:19:15 sas Exp $ */
 
 #include "php.h"
 #include "ext/standard/head.h"
@@ -150,7 +150,7 @@
                php_error_docref("ref.outcontrol" TSRMLS_CC, E_ERROR, "Cannot use 
output buffering in output buffering display handlers");
                return FAILURE;
        }
-       if (chunk_size) {
+       if (chunk_size > 0) {
                if (chunk_size==1) {
                        chunk_size = 4096;
                }
@@ -498,10 +498,7 @@
                php_error_docref(NULL TSRMLS_CC, E_ERROR, "No method name given: use 
ob_start(array($object,'method')) to specify instance $object and the name of a method 
of class %s to use as output handler", Z_OBJCE_P(output_handler)->name);
                result = FAILURE;
        } else {
-               if (output_handler) {
-                       SEPARATE_ZVAL(&output_handler);
-               }
-               result = php_ob_init_named(initial_size, block_size, 
OB_DEFAULT_HANDLER_NAME, output_handler, chunk_size, erase TSRMLS_CC);
+               result = php_ob_init_named(initial_size, block_size, 
OB_DEFAULT_HANDLER_NAME, NULL, chunk_size, erase TSRMLS_CC);
        }
        return result;
 }
@@ -719,6 +716,9 @@
                RETURN_FALSE;
        }
 
+       if (chunk_size < 0)
+               chunk_size = 0;
+       
        if (php_start_ob_buffer(output_handler, chunk_size, erase TSRMLS_CC)==FAILURE) 
{
                RETURN_FALSE;
        }



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

Reply via email to