masugata Wed Apr 4 15:28:18 2007 UTC
Modified files: (Branch: PHP_4_4)
/php-src/ext/mbstring mbstring.c
Log:
Sync with mail function in mb_send_mail function(problem MOPB-33-2007:PHP and
MOPB-34-2007:PHP).
http://cvs.php.net/viewvc.cgi/php-src/ext/mbstring/mbstring.c?r1=1.142.2.47.2.20&r2=1.142.2.47.2.21&diff_format=u
Index: php-src/ext/mbstring/mbstring.c
diff -u php-src/ext/mbstring/mbstring.c:1.142.2.47.2.20
php-src/ext/mbstring/mbstring.c:1.142.2.47.2.21
--- php-src/ext/mbstring/mbstring.c:1.142.2.47.2.20 Sun Mar 18 17:19:30 2007
+++ php-src/ext/mbstring/mbstring.c Wed Apr 4 15:28:18 2007
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: mbstring.c,v 1.142.2.47.2.20 2007/03/18 17:19:30 iliaa Exp $ */
+/* $Id: mbstring.c,v 1.142.2.47.2.21 2007/04/04 15:28:18 masugata Exp $ */
/*
* PHP4 Multibyte String module "mbstring"
@@ -3506,20 +3506,20 @@
#if HAVE_SENDMAIL
#define SKIP_LONG_HEADER_SEP_MBSTRING(str, pos)
\
if (str[pos] == '\r' && str[pos + 1] == '\n' && (str[pos + 2] == ' ' ||
str[pos + 2] == '\t')) { \
- pos += 3;
\
- while (str[pos] == ' ' || str[pos] == '\t') { \
- pos++;
\
- } \
- continue;
\
- }
\
- else if (str[pos] == '\n' && (str[pos + 1] == ' ' || str[pos + 1] ==
'\t')) { \
pos += 2;
\
- while (str[pos] == ' ' || str[pos] == '\t') { \
+ while (str[pos + 1] == ' ' || str[pos + 1] == '\t') {
\
pos++;
\
- }
\
+ } \
continue;
\
}
\
+#define MAIL_ASCIIZ_CHECK_MBSTRING(str, len) \
+ pp = str; \
+ ee = pp + len; \
+ while ((pp = memchr(pp, '\0', (ee - pp)))) { \
+ *pp = ' '; \
+ } \
+
PHP_FUNCTION(mb_send_mail)
{
int argc, n;
@@ -3536,7 +3536,8 @@
const mbfl_language *lang;
int err = 0;
char *to_r = NULL;
- int to_len, i;
+ int to_len, extra_cmd_len, i;
+ char *pp, *ee;
if (PG(safe_mode) && (ZEND_NUM_ARGS() == 5)) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "SAFE MODE
Restriction in effect. The fifth parameter is disabled in SAFE MODE.");
@@ -3569,6 +3570,8 @@
if (Z_STRVAL_PP(argv[0])) {
to = Z_STRVAL_PP(argv[0]);
to_len = Z_STRLEN_PP(argv[0]);
+ /* ASCIIZ check */
+ MAIL_ASCIIZ_CHECK_MBSTRING(to, to_len);
if (to_len > 0) {
to_r = estrndup(to, to_len);
for (; to_len; to_len--) {
@@ -3605,6 +3608,8 @@
orig_str.no_language = MBSTRG(current_language);
orig_str.val = (unsigned char *)Z_STRVAL_PP(argv[1]);
orig_str.len = Z_STRLEN_PP(argv[1]);
+ /* ASCIIZ check */
+ MAIL_ASCIIZ_CHECK_MBSTRING(orig_str.val, orig_str.len);
orig_str.no_encoding = MBSTRG(current_internal_encoding);
if (orig_str.no_encoding == mbfl_no_encoding_invalid
|| orig_str.no_encoding == mbfl_no_encoding_pass) {
@@ -3627,6 +3632,8 @@
orig_str.no_language = MBSTRG(current_language);
orig_str.val = Z_STRVAL_PP(argv[2]);
orig_str.len = Z_STRLEN_PP(argv[2]);
+ /* ASCIIZ check */
+ MAIL_ASCIIZ_CHECK_MBSTRING(orig_str.val, orig_str.len);
orig_str.no_encoding = MBSTRG(current_internal_encoding);
if (orig_str.no_encoding == mbfl_no_encoding_invalid
@@ -3663,6 +3670,8 @@
convert_to_string_ex(argv[3]);
p = Z_STRVAL_PP(argv[3]);
n = Z_STRLEN_PP(argv[3]);
+ /* ASCIIZ check */
+ MAIL_ASCIIZ_CHECK_MBSTRING(p, n);
mbfl_memory_device_strncat(&device, p, n);
if (p[n - 1] != '\n') {
mbfl_memory_device_strncat(&device, "\n", 1);
@@ -3686,6 +3695,9 @@
if (argc == 5) { /* extra options that get passed to the mailer
*/
convert_to_string_ex(argv[4]);
extra_cmd = Z_STRVAL_PP(argv[4]);
+ extra_cmd_len = Z_STRLEN_PP(argv[4]);
+ /* ASCIIZ check */
+ MAIL_ASCIIZ_CHECK_MBSTRING(extra_cmd, extra_cmd_len);
}
if (extra_cmd) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php