dmitry          Wed Dec  7 04:00:33 2005 EDT

  Modified files:              
    /php-src/main       main.c 
  Log:
  Fixed memory overflow, because usage of initialized value
  
  
http://cvs.php.net/diff.php/php-src/main/main.c?r1=1.657&r2=1.658&ty=u
Index: php-src/main/main.c
diff -u php-src/main/main.c:1.657 php-src/main/main.c:1.658
--- php-src/main/main.c:1.657   Tue Dec  6 21:37:35 2005
+++ php-src/main/main.c Wed Dec  7 04:00:29 2005
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: main.c,v 1.657 2005/12/07 02:37:35 iliaa Exp $ */
+/* $Id: main.c,v 1.658 2005/12/07 09:00:29 dmitry Exp $ */
 
 /* {{{ includes
  */
@@ -556,6 +556,7 @@
        char *origin;
        char *message;
        char *stage;
+       int function_name_is_string = 1;
 
        /* get error text into buffer and escape for html if necessary */
        buffer_len = vspprintf(&buffer, 0, format, args);
@@ -595,6 +596,7 @@
                                stage = "Unknown";
                }
        } else {
+               function_name_is_string = 0;
                function = get_active_function_name(TSRMLS_C);
                if (!function || !USTR_LEN(function)) {
                        stage = "Unknown";
@@ -604,9 +606,13 @@
 
        /* if we still have memory then format the origin */
        if (function) {
-               spprintf(&origin, 0, "%v%s%v(%s)", class_name, space, function, 
params);        
+               if (function_name_is_string) {
+                       origin_len = spprintf(&origin, 0, "%v%s%s(%s)", 
class_name, space, function, params);   
+               } else {
+                       origin_len = spprintf(&origin, 0, "%v%s%v(%s)", 
class_name, space, function, params);   
+               }
        } else {
-               spprintf(&origin, 0, "%s", stage);      
+               origin_len = spprintf(&origin, 0, "%s", stage); 
        }
 
        if (PG(html_errors)) {
@@ -614,7 +620,7 @@
                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 
*/
        if (docref && docref[0] == '#') {
@@ -624,7 +630,11 @@
 
        /* no docref given but function is known (the default) */
        if (!docref && function) {
-               spprintf(&docref_buf, 0, "function.%v", function);
+               if (function_name_is_string) {
+                       spprintf(&docref_buf, 0, "function.%s", function);
+               } else {
+                       spprintf(&docref_buf, 0, "function.%v", function);
+               }
                while((p = strchr(docref_buf, '_')) != NULL) {
                        *p = '-';
                }

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

Reply via email to