- 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 7bd421c54c575bca406eec0bb35fdf64fd27bf8f..4c00256343bb1e877566012f7746ed0dd1159c9a 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,12 +18,12 @@ PHP                                                                        NEWS
 - Implemented FR #49253 (added support for libcurl's CERTINFO option).
   (Linus Nielsen Feltzing <linus@haxx.se>)
 
+- Fixed error_log() to be binary safe when using message_type 3. (Jani)
 - Fixed unnecessary invocation of setitimer when timeouts have been disabled.
   (Arvind Srinivasan)
 - Fixed memory leak in extension loading when an error occurs on Windows.
   (Pierre)
 
-
 - Fixed bug #50219 (soap call Segmentation fault on a redirected url).
   (Pierrick)
 - Fixed bug #50212 (crash by ldap_get_option() with LDAP_OPT_NETWORK_TIMEOUT).
index ab46e4b069d0f5785990871df08d7708db8a532e..b035782dc35a9dc7703d20a340e881ecc7d58b3d 100644 (file)
@@ -4652,7 +4652,7 @@ PHP_FUNCTION(error_log)
                opt_err = erropt;
        }
 
-       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;
        }
 
@@ -4660,17 +4660,22 @@ 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;
 
@@ -4681,11 +4686,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);
@@ -4693,6 +4700,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 b599442fcffa6015735eddbdf0e4473a66502905..7501485686f3893d35c3f7fe6da7f6bb6ca4770c 100644 (file)
@@ -141,7 +141,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);
 PHPAPI int php_prefix_varname(zval *result, zval *prefix, char *var_name, int var_name_len, zend_bool add_underscore TSRMLS_DC);
 
 #if SIZEOF_INT == 4