summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIlia Alshanetsky <iliaa@php.net>2004-12-22 17:27:39 +0000
committerIlia Alshanetsky <iliaa@php.net>2004-12-22 17:27:39 +0000
commitb19e6669467a7faee7024e20794da511de8575e9 (patch)
treeba38166491186a5ea3898404994b34b93f4210a1
parent287dc7a32b547f690a5e8f26f9ca448497158406 (diff)
downloadphp-git-b19e6669467a7faee7024e20794da511de8575e9.tar.gz
Fixed bug #31142 (imap_mail_compose() fails to generate correct output).
-rw-r--r--ext/imap/php_imap.c18
-rw-r--r--ext/imap/tests/bug31142_1.phpt59
-rw-r--r--ext/imap/tests/bug31142_2.phpt30
3 files changed, 95 insertions, 12 deletions
diff --git a/ext/imap/php_imap.c b/ext/imap/php_imap.c
index 05eabea324..a2c4e43923 100644
--- a/ext/imap/php_imap.c
+++ b/ext/imap/php_imap.c
@@ -3150,8 +3150,9 @@ PHP_FUNCTION(imap_mail_compose)
/* for each part */
do {
+ t=tmp;
/* build cookie */
- sprintf (t=tmp, "--%s%s", cookie, CRLF);
+ sprintf (t, "--%s%s", cookie, CRLF);
/* append mini-header */
rfc822_write_body_header(&t, &part->body);
@@ -3169,29 +3170,22 @@ PHP_FUNCTION(imap_mail_compose)
bod=&part->body;
tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
+ sprintf(tempstring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
efree(mystring);
mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
} while ((part = part->next)); /* until done */
/* output trailing cookie */
sprintf(tmp, "--%s--", cookie);
tempstring=emalloc(strlen(tmp)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
+ sprintf(tempstring, "%s%s%s", mystring, tmp, CRLF);
efree(mystring);
mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, tmp, CRLF);
-
} else if (bod) {
-
- tempstring=emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
- strcpy(tempstring, mystring);
+ tempstring = emalloc(strlen(bod->contents.text.data)+strlen(CRLF)+strlen(mystring)+1);
+ sprintf(tempstring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
efree(mystring);
mystring=tempstring;
- sprintf(mystring, "%s%s%s", mystring, bod->contents.text.data, CRLF);
-
} else {
efree(mystring);
RETURN_FALSE;
diff --git a/ext/imap/tests/bug31142_1.phpt b/ext/imap/tests/bug31142_1.phpt
new file mode 100644
index 0000000000..154f4cf4cd
--- /dev/null
+++ b/ext/imap/tests/bug31142_1.phpt
@@ -0,0 +1,59 @@
+--TEST--
+Bug #31142 test #1 (imap_mail_compose() generates incorrect output)
+--SKIPIF--
+<?php
+ if (!extension_loaded("imap")) {
+ die("skip imap extension not available");
+ }
+?>
+--FILE--
+<?php
+
+$envelope["from"]= "joe@example.com";
+$envelope["to"] = "foo@example.com";
+$envelope["cc"] = "bar@example.com";
+
+$part1["type"] = TYPEMULTIPART;
+$part1["subtype"] = "mixed";
+
+$part2["type"] = TYPEAPPLICATION;
+$part2["encoding"] = ENCBINARY;
+$part2["subtype"] = "octet-stream";
+$part2["description"] = "some file";
+$part2["contents.data"] = "ABC";
+
+$part3["type"] = TYPETEXT;
+$part3["subtype"] = "plain";
+$part3["description"] = "description3";
+$part3["contents.data"] = "contents.data3\n\n\n\t";
+
+$body[1] = $part1;
+$body[2] = $part2;
+$body[3] = $part3;
+
+echo imap_mail_compose($envelope, $body);
+
+?>
+--EXPECTF--
+From: joe@example.com
+To: foo@example.com
+cc: bar@example.com
+MIME-Version: 1.0
+Content-Type: MULTIPART/mixed; BOUNDARY="%s"
+
+---%s
+Content-Type: APPLICATION/octet-stream
+Content-Transfer-Encoding: BASE64
+Content-Description: some file
+
+QUJD
+
+---%s
+Content-Type: TEXT/plain; CHARSET=US-ASCII
+Content-Description: description3
+
+contents.data3
+
+
+
+---%s-- \ No newline at end of file
diff --git a/ext/imap/tests/bug31142_2.phpt b/ext/imap/tests/bug31142_2.phpt
new file mode 100644
index 0000000000..2a81760a7b
--- /dev/null
+++ b/ext/imap/tests/bug31142_2.phpt
@@ -0,0 +1,30 @@
+--TEST--
+Bug #31142 test #2 (imap_mail_compose() generates incorrect output)
+--SKIPIF--
+<?php
+ if (!extension_loaded("imap")) {
+ die("skip imap extension not available");
+ }
+?>
+--FILE--
+<?php
+$envelope["from"]= 'host@domain.com';
+$envelope["return_path"]= 'host@domain.com';
+
+$part1["type"]=TYPETEXT;
+$part1["subtype"]="plain";
+$part1["encoding"]=ENCQUOTEDPRINTABLE ;
+$part1["charset"]='iso-8859-2';
+$part1["contents.data"]=imap_8bit('asn řkl');
+
+$body = array($part1);
+
+echo imap_mail_compose($envelope, $body);
+?>
+--EXPECT--
+From: host@domain.com
+MIME-Version: 1.0
+Content-Type: TEXT/plain; CHARSET=iso-8859-2
+Content-Transfer-Encoding: QUOTED-PRINTABLE
+
+asn =C5=99kl \ No newline at end of file