]> granicus.if.org Git - php/commitdiff
- Fixed error_log() to be binary safe when using message_type 3 (message appended...
authorJani Taskinen <jani@php.net>
Sun, 22 Nov 2009 18:31:01 +0000 (18:31 +0000)
committerJani Taskinen <jani@php.net>
Sun, 22 Nov 2009 18:31:01 +0000 (18:31 +0000)
NEWS
ext/standard/basic_functions.c
ext/standard/basic_functions.h

diff --git a/NEWS b/NEWS
index 760c1e3715b21be6fae0444c04e4e5effb5f7d72..5d2f660143363b8a122b3854c88151e6341ef4a2 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ PHP                                                                        NEWS
 - Changed "post_max_size" php.ini directive to allow unlimited post size by
   setting it to 0. (Rasmus)
 
+- Fixed error_log() to be binary safe when using message_type 3. (Jani)
+
 - Fixed bug #50219 (soap call Segmentation fault on a redirected url).
   (Pierrick)
 - Fixed bug #50207 (segmentation fault when concatenating very large strings
index 8f89dc022b96bef84d79c60c087359b37161c910..ae2bde9fe6932a1c306bafda645e41ec8e193b28 100644 (file)
@@ -4974,7 +4974,7 @@ error options:
 PHP_FUNCTION(error_log)
 {
        zval **string, **erropt = NULL, **option = NULL, **emailhead = NULL;
-       int opt_err = 0;
+       int opt_err = 0, message_len = 0;
        char *message, *opt = NULL, *headers = NULL;
 
        switch (ZEND_NUM_ARGS()) {
@@ -5018,6 +5018,7 @@ PHP_FUNCTION(error_log)
 
        convert_to_string_ex(string);
        message = Z_STRVAL_PP(string);
+       message_len = Z_STRLEN_PP(string);
 
        if (erropt != NULL) {
                convert_to_long_ex(erropt);
@@ -5034,7 +5035,7 @@ PHP_FUNCTION(error_log)
                headers = Z_STRVAL_PP(emailhead);
        }
 
-       if (_php_error_log(opt_err, message, opt, headers TSRMLS_CC) == FAILURE) {
+       if (_php_error_log_ex(opt_err, message, message_len, opt, headers TSRMLS_CC) == FAILURE) {
                RETURN_FALSE;
        }
        
@@ -5042,18 +5043,21 @@ PHP_FUNCTION(error_log)
 }
 /* }}} */
 
-
+/* For BC (not binary safe!) */
 PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC)
 {
-       php_stream *stream = NULL;
+       return _php_error_log_ex(opt_err, message, (opt_err == 3) ? strlen(message) : 0, opt, headers TSRMLS_CC);
+}
 
-       switch (opt_err) {
+PHPAPI int _php_error_log_ex(int opt_err, char *message, int message_len, char *opt, char *headers TSRMLS_DC)
+{
+       php_stream *stream = NULL;
 
+       switch (opt_err)
+       {
                case 1:         /*send an email */
-                       {
-                               if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
-                                       return FAILURE;
-                               }
+                       if (!php_mail(opt, "PHP error_log message", message, headers, NULL TSRMLS_CC)) {
+                               return FAILURE;
                        }
                        break;
 
@@ -5064,11 +5068,13 @@ PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers T
 
                case 3:         /*save to a file */
                        stream = php_stream_open_wrapper(opt, "a", IGNORE_URL_WIN | ENFORCE_SAFE_MODE | REPORT_ERRORS, NULL);
-                       if (!stream)
+                       if (!stream) {
                                return FAILURE;
-                       php_stream_write(stream, message, strlen(message));
+                       }
+                       php_stream_write(stream, message, message_len);
                        php_stream_close(stream);
                        break;
+
                case 4: /* send to SAPI */
                        if (sapi_module.log_message) {
                                sapi_module.log_message(message);
@@ -5076,6 +5082,7 @@ PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers T
                                return FAILURE;
                        }
                        break;
+
                default:
                        php_log_err(message TSRMLS_CC);
                        break;
index 7d7e8f6ba16457164e2b371972a537f291b159ed..bf0eb89ef1b68362397e7f8049b46f3c44551489 100644 (file)
@@ -135,7 +135,9 @@ PHP_FUNCTION(stream_bucket_new);
 PHP_MINIT_FUNCTION(user_filters);
 PHP_RSHUTDOWN_FUNCTION(user_filters);
 
+/* Left for BC (not binary safe!) */
 PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers TSRMLS_DC);
+PHPAPI int _php_error_log_ex(int opt_err, char *message, int message_len, char *opt, char *headers TSRMLS_DC);
 
 #if SIZEOF_INT == 4
 /* Most 32-bit and 64-bit systems have 32-bit ints */