]> granicus.if.org Git - php/commitdiff
Fixed bug #31142 (imap_mail_compose() fails to generate correct output).
authorIlia Alshanetsky <iliaa@php.net>
Wed, 22 Dec 2004 17:27:39 +0000 (17:27 +0000)
committerIlia Alshanetsky <iliaa@php.net>
Wed, 22 Dec 2004 17:27:39 +0000 (17:27 +0000)
ext/imap/php_imap.c
ext/imap/tests/bug31142_1.phpt [new file with mode: 0644]
ext/imap/tests/bug31142_2.phpt [new file with mode: 0644]

index 05eabea32450d09e67abfd4ca9d9836e41064d3a..a2c4e43923a8eba5ae7709be4a857a2097479a98 100644 (file)
@@ -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 (file)
index 0000000..154f4cf
--- /dev/null
@@ -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 (file)
index 0000000..2a81760
--- /dev/null
@@ -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