diff options
author | Ilia Alshanetsky <iliaa@php.net> | 2004-12-22 17:27:39 +0000 |
---|---|---|
committer | Ilia Alshanetsky <iliaa@php.net> | 2004-12-22 17:27:39 +0000 |
commit | b19e6669467a7faee7024e20794da511de8575e9 (patch) | |
tree | ba38166491186a5ea3898404994b34b93f4210a1 | |
parent | 287dc7a32b547f690a5e8f26f9ca448497158406 (diff) | |
download | php-git-b19e6669467a7faee7024e20794da511de8575e9.tar.gz |
Fixed bug #31142 (imap_mail_compose() fails to generate correct output).
-rw-r--r-- | ext/imap/php_imap.c | 18 | ||||
-rw-r--r-- | ext/imap/tests/bug31142_1.phpt | 59 | ||||
-rw-r--r-- | ext/imap/tests/bug31142_2.phpt | 30 |
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 |