dvadf
tests/gh29.phpt 0000644 00000001126 15145003357 0007357 0 ustar 00 --TEST--
GH issue #29 Segmentation fault with ISO-2022-JP Subject header
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$data = <<<'EOF'
From: aaa@example.jp
To: bbb@example.jp
Subject: $B%X%C%@$"$j(B
Content-type: text/plain; charset=ISO-2022-JP
Content-transfer-encoding: 7bit
$B$*Hh$lMM$G$9!"%F%9%H%a!<%k$G$9!#(B
$B0J>e!"$h$m$7$/$*4j$$CW$7$^$9!#(B
EOF;
$resource = mailparse_msg_create();
$r = mailparse_msg_parse($resource, $data);
echo 'ok', PHP_EOL;
mailparse_msg_free($resource);
exit(0);
?>
--EXPECTF--
ok
tests/bug75825.phpt 0000644 00000004151 15145003357 0007777 0 ustar 00 --TEST--
Bug #75825 (mailparse_uudecode_all doesn't parse multiple files)
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$data = <<<'EOD'
begin 644 .profile
M(R!^+RYP<F]F:6QE.B!E>&5C=71E9"!B>2!T:&4@8V]M;6%N9"!I;G1E<G!R
M971E<B!F;W(@;&]G:6X@<VAE;&QS+@HC(%1H:7,@9FEL92!I<R!N;W0@<F5A
M9"!B>2!B87-H*#$I+"!I9B!^+RYB87-H7W!R;V9I;&4@;W(@?B\N8F%S:%]L
M;V=I;@HC(&5X:7-T<RX*(R!S964@+W5S<B]S:&%R92]D;V,O8F%S:"]E>&%M
M<&QE<R]S=&%R='5P+69I;&5S(&9O<B!E>&%M<&QE<RX*(R!T:&4@9FEL97,@
M87)E(&QO8V%T960@:6X@=&AE(&)A<V@M9&]C('!A8VMA9V4N"@HC('1H92!D
M969A=6QT('5M87-K(&ES('-E="!I;B`O971C+W!R;V9I;&4[(&9O<B!S971T
M:6YG('1H92!U;6%S:PHC(&9O<B!S<V@@;&]G:6YS+"!I;G-T86QL(&%N9"!C
M;VYF:6=U<F4@=&AE(&QI8G!A;2UU;6%S:R!P86-K86=E+@HC=6UA<VL@,#(R
M"@HC(&EF(')U;FYI;F<@8F%S:`II9B!;("UN("(D0D%32%]615)324].(B!=
M.R!T:&5N"B`@("`C(&EN8VQU9&4@+F)A<VAR8R!I9B!I="!E>&ES=',*("`@
M(&EF(%L@+68@(B1(3TU%+RYB87-H<F,B(%T[('1H96X*"2X@(B1(3TU%+RYB
M87-H<F,B"B`@("!F:0IF:0H*(R!S970@4$%42"!S;R!I="!I;F-L=61E<R!U
M<V5R)W,@<')I=F%T92!B:6X@:68@:70@97AI<W1S"FEF(%L@+60@(B1(3TU%
M+V)I;B(@72`[('1H96X*("`@(%!!5$@](B1(3TU%+V)I;CHD4$%42"(*9FD*
`
end
begin 644 .bash_logout
M(R!^+RYB87-H7VQO9V]U=#H@97AE8W5T960@8GD@8F%S:"@Q*2!W:&5N(&QO
M9VEN('-H96QL(&5X:71S+@H*(R!W:&5N(&QE879I;F<@=&AE(&-O;G-O;&4@
M8VQE87(@=&AE('-C<F5E;B!T;R!I;F-R96%S92!P<FEV86-Y"@II9B!;("(D
M4TA,5DPB(#T@,2!=.R!T:&5N"B`@("!;("UX("]U<W(O8FEN+V-L96%R7V-O
H;G-O;&4@72`F)B`O=7-R+V)I;B]C;&5A<E]C;VYS;VQE("UQ"F9I"@``
`
end
begin 644 .selected_editor
`
end
EOD;
$h = fopen('php://memory', 'w+');
$h || die("Failed to open string!\n");
fwrite($h, $data);
rewind($h);
$parsed = mailparse_uudecode_all($h);
fclose($h);
var_dump($parsed);
?>
--EXPECTF--
array(4) {
[0]=>
array(1) {
["filename"]=>
string(%d) "%s"
}
[1]=>
array(2) {
["origfilename"]=>
string(8) ".profile"
["filename"]=>
string(%d) "%s"
}
[2]=>
array(2) {
["origfilename"]=>
string(12) ".bash_logout"
["filename"]=>
string(%d) "%s"
}
[3]=>
array(2) {
["origfilename"]=>
string(16) ".selected_editor"
["filename"]=>
string(%d) "%s"
}
}
tests/009.phpt 0000644 00000001600 15145003357 0007113 0 ustar 00 --TEST--
Multiple UUE attachments not recognized
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
error_reporting(E_ALL);
$msg = new MimeMessage("file", dirname(__FILE__) . "/testdata/oeuue");
$n = $msg->get_child_count();
$uue = $msg->enum_uue();
var_dump($n);
var_dump($uue);
?>
--EXPECT--
int(0)
array(3) {
[0]=>
array(4) {
["filename"]=>
string(11) "README1.dat"
["start-pos"]=>
int(654)
["filesize"]=>
int(88)
["end-pos"]=>
int(785)
}
[1]=>
array(4) {
["filename"]=>
string(11) "README2.dat"
["start-pos"]=>
int(808)
["filesize"]=>
int(88)
["end-pos"]=>
int(939)
}
[2]=>
array(4) {
["filename"]=>
string(11) "README3.dat"
["start-pos"]=>
int(962)
["filesize"]=>
int(88)
["end-pos"]=>
int(1093)
}
}
tests/001.phpt 0000644 00000000510 15145003357 0007102 0 ustar 00 --TEST--
Check for mailparse presence
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
echo "mailparse extension is available";
?>
--EXPECT--
mailparse extension is available
tests/012.phpt 0000644 00000000663 15145003357 0007115 0 ustar 00 --TEST--
Check mailparse_mimemessage_extract_uue (file mode)
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
$msg = new MimeMessage("file", dirname(__FILE__) . "/testdata/oeuue");
var_dump( $msg->extract_uue(0, MAILPARSE_EXTRACT_RETURN));
?>
--EXPECT--
string(88) "FooBar - Baaaaa
Requirements:
o php with mailparse
o virus scanner (optional)
"
tests/002.phpt 0000644 00000001073 15145003357 0007110 0 ustar 00 --TEST--
Check stream encoding
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$text = <<<EOD
hello, this is some text=hello.
EOD;
$fp = tmpfile();
fwrite($fp, $text);
rewind($fp);
$dest = tmpfile();
mailparse_stream_encode($fp, $dest, "quoted-printable");
rewind($dest);
$data = fread($dest, 2048);
echo $data;
?>
--EXPECT--
hello, this is some text=3Dhello.
tests/007.phpt 0000644 00000002235 15145003357 0007116 0 ustar 00 --TEST--
Check RFC822 Conformance
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$addresses = array(
"\":sysmail\"@ Some-Group. Some-Org, Muhammed.(I am the greatest) Ali @(the)Vegas.WBA",
"\"strange\":\":sysmail\"@ Some-Group. Some-Org, Muhammed.(I am the greatest) Ali @(the)Vegas.WBA;"
);
foreach($addresses as $address) {
$parsed = mailparse_rfc822_parse_addresses($address);
foreach($parsed as $pair) {
print $pair["display"] . "\n";
print $pair["address"] . "\n";
if ($pair["is_group"]) {
$sub = mailparse_rfc822_parse_addresses(substr($pair["address"], 1, strlen($pair["address"]) - 2));
foreach($sub as $subpair) {
print " " . $subpair["address"] . "\n";
}
}
}
print "...\n";
}
?>
--EXPECT--
:sysmail@Some-Group.Some-Org
":sysmail"@Some-Group.Some-Org
I am the greatest the
Muhammed.Ali@Vegas.WBA
...
strange
:":sysmail"@Some-Group.Some-Org,Muhammed.Ali@Vegas.WBA;
":sysmail"@Some-Group.Some-Org
Muhammed.Ali@Vegas.WBA
...
tests/012-var.phpt 0000644 00000000721 15145003357 0007676 0 ustar 00 --TEST--
Check mailparse_mimemessage_extract_uue (var mode)
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
$var = file_get_contents(dirname(__FILE__) . "/testdata/oeuue");
$msg = new MimeMessage("var", $var);
var_dump( $msg->extract_uue(0, MAILPARSE_EXTRACT_RETURN));
?>
--EXPECT--
string(88) "FooBar - Baaaaa
Requirements:
o php with mailparse
o virus scanner (optional)
"
tests/008.phpt 0000644 00000000542 15145003357 0007116 0 ustar 00 --TEST--
OO API Segfault when opening a file is not possible
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
error_reporting(0);
$msg = new MimeMessage("file", md5(uniqid("nothere")));
if (is_resource($msg))
echo "Err??";
else
echo "OK";
?>
--EXPECT--
OK
tests/bug73110.phpt 0000644 00000001615 15145003357 0007762 0 ustar 00 --TEST--
Bug #73110 (Mails with unknown MIME version are treated as plain/text)
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$text = 'Mime-Version: 1.0;
Content-Type: multipart/Alternative; boundary="=====1473780076CSSSMTP_CLIENT=="
--=====1473780076CSSSMTP_CLIENT==
Content-Type: text/plain
Hello please pay attached invoice
--=====1473780076CSSSMTP_CLIENT==
Content-Type: text/html; charset=utf-8
Hello please pay attached invoice
--=====1473780076CSSSMTP_CLIENT==--';
$stream = fopen('php://memory', 'r+');
fwrite($stream, $text);
fseek($stream, 0);
$resource = mailparse_msg_create();
mailparse_msg_parse($resource, fread($stream, 10000));
$data = mailparse_msg_get_part_data(mailparse_msg_get_part($resource, 1));
var_dump($data['content-type']);
mailparse_msg_free($resource);
?>
--EXPECT--
string(21) "multipart/alternative"
tests/013.phpt 0000644 00000000542 15145003357 0007112 0 ustar 00 --TEST--
Check mailparse_mimemessage_extract_uue
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
$msg = mailparse_msg_parse_file(dirname(__FILE__) . "/testdata/oeuue");
var_dump($msg);
mailparse_msg_free($msg);
?>
--EXPECTF--
resource(%d) of type (mailparse_mail_structure)
tests/011.phpt 0000644 00000001246 15145003357 0007112 0 ustar 00 --TEST--
Check mailparse_determine_best_xfer_encoding
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
$files = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(dirname(__FILE__) . "/testdata"));
$names = array();
foreach ($files as $file) {
if (strrpos($file->getFileName(), '.txt') !== false) {
$names[] = $file->getRealPath();
}
}
sort($names);
foreach ($names as $name) {
var_dump(mailparse_determine_best_xfer_encoding(fopen($name, 'r')));
}
?>
--EXPECT--
string(4) "7bit"
string(4) "7bit"
string(6) "BASE64"
string(4) "7bit"
string(4) "7bit"
string(4) "7bit"
string(4) "7bit"
tests/parse_test_messages.phpt 0000644 00000011245 15145003357 0012651 0 ustar 00 --TEST--
Parse messages in testdata dir
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse") || !extension_loaded("zlib")) print "skip missing mailparse or zlib"; ?>
--FILE--
<?php
error_reporting(E_ALL ^ E_NOTICE);
$define_expect = isset($argv[1]) && $argv[1] == "define_expect";
$force_test = isset($argv[1]) && !$define_expect ? $argv[1] : null;
$testdir = dirname(__FILE__) . "/testdata";
$dir = opendir($testdir) or die("unable to open test dir!");
$messages = array();
while (($f = readdir($dir)) !== false) {
if ($f == "CVS" || $f == "." || $f == ".." || !strpos($f, '.'))
continue;
list($name, $suffix) = explode(".", $f, 2);
switch($suffix) {
case "txt":
case "txt.gz":
$messages[$name]["testfile"] = $f;
break;
case "exp":
$messages[$name]["expectfile"] = $f;
break;
}
}
ksort($messages);
if ($force_test !== null) {
$messages = array($force_test => $messages[$force_test]);
}
if (function_exists("version_compare") && version_compare(phpversion(), "4.3", "ge")) {
$wrapper = "compress.zlib://";
} else {
/* this section is here because it is useful to compare to the
* original implementaion of mailparse for PHP 4.2 */
$wrapper = "zlib:";
function file_get_contents($filename)
{
$fp = fopen($filename, "rb");
$data = fread($fp, filesize($filename));
fclose($fp);
return $data;
}
}
function diff_strings($left, $right)
{
if (is_executable("/usr/bin/diff")) {
$lf = tempnam("/tmp", "mpt");
$rf = tempnam("/tmp", "mpt");
$ok = false;
$fp = fopen($lf, "wb");
if ($fp) {
fwrite($fp, $left);
fclose($fp);
$fp = fopen($rf, "wb");
if ($fp) {
fwrite($fp, $right);
fclose($fp);
$ok = true;
}
}
if ($ok) {
passthru("/usr/bin/diff -u $lf $rf");
}
unlink($lf);
unlink($rf);
if ($ok)
return;
}
$left = explode("\n", $left);
$right = explode("\n", $right);
$n = max(count($left), count($right));
$difflines = array();
$runstart = null;
$runend = null;
for ($i = 0; $i < $n; $i++) {
if ($left[$i] != $right[$i]) {
if ($runstart === null) {
$runstart = $i;
$runend = $i;
} else {
/* part of the run */
$runend = $i;
}
} else {
if ($runstart !== null) {
$difflines[] = array($runstart, $runend);
$runstart = null;
$runend = null;
}
}
}
if ($runstart !== null)
$difflines[] = array($runstart, $runend);
$lastprint = null;
foreach ($difflines as $run) {
list($start, $end) = $run;
$startline = $start - 3;
if ($startline < 0)
$startline = 0;
$endline = $end;
if ($lastprint === null) {
echo "@@ Line: " . ($startline+1) . "\n";
} else if ($startline <= $lastprint) {
$startline = $lastprint+1;
}
if ($startline > $endline)
continue;
/* starting context */
for ($i = $startline; $i < $start; $i++) {
echo " " . $left[$i] . "\n";
$lastprint = $i;
}
/* diff run */
for ($i = $start; $i <= $end; $i++) {
echo "-" . $left[$i] . "\n";
}
for ($i = $start; $i <= $end; $i++) {
echo "+" . $right[$i] . "\n";
}
$lastprint = $i;
}
}
$skip_keys = array("headers", "ending-pos-body");
foreach ($messages as $name => $msgdata) {
$testname = $testdir . "/" . $msgdata["testfile"];
if (!isset($msgdata["expectfile"])) {
continue;
}
$expectname = $testdir . "/" . $msgdata["expectfile"];
$use_wrapper = substr($testname, -3) == ".gz" ? $wrapper : "";
$use_wrapper = $wrapper;
$fp = fopen("$use_wrapper$testname", "rb") or die("failed to open the file!");
$mime = mailparse_msg_create();
$size = 0;
while (!feof($fp)) {
$data = fread($fp, 1024);
//var_dump($data);
if ($data !== false) {
mailparse_msg_parse($mime, $data);
$size += strlen($data);
}
}
fclose($fp);
//var_dump($size);
$struct = mailparse_msg_get_structure($mime);
ob_start();
echo "Message: $name\n";
foreach($struct as $partname) {
$depth = count(explode(".", $partname)) - 1;
$indent = str_repeat(" ", $depth * 2);
$subpart = mailparse_msg_get_part($mime, $partname);
if (!$subpart) {
var_dump($partname);
echo "\n";
var_dump($struct);
break;
}
$data = mailparse_msg_get_part_data($subpart);
echo "\n{$indent}Part $partname\n";
ksort($data);
foreach ($data as $key => $value) {
if (in_array($key, $skip_keys))
continue;
echo "$indent$key => ";
var_dump($value);
}
}
$output = ob_get_contents();
if ($define_expect) {
$fp = fopen($expectname, "wb");
fwrite($fp, $output);
fclose($fp);
} else {
$expect = file_get_contents($expectname);
if ($output != $expect) {
ob_end_flush();
diff_strings($expect, $output);
die("FAIL!");
}
}
ob_end_clean();
}
echo "All messages parsed OK!\n";
?>
--EXPECT--
All messages parsed OK!
tests/004.phpt 0000644 00000001375 15145003357 0007117 0 ustar 00 --TEST--
Check uudecode_all
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$text = <<<EOD
To: fred@bloggs.com
hello, this is some text hello.
blah blah blah.
begin 644 test.txt
/=&AI<R!I<R!A('1E<W0*
`
end
EOD;
$fp = tmpfile();
fwrite($fp, $text);
$data = mailparse_uudecode_all($fp);
echo "BODY\n";
readfile($data[0]["filename"]);
echo "UUE\n";
readfile($data[1]["filename"]);
unlink($data[0]["filename"]);
unlink($data[1]["filename"]);
?>
--EXPECT--
BODY
To: fred@bloggs.com
hello, this is some text hello.
blah blah blah.
UUE
this is a test
tests/gh22.phpt 0000644 00000003416 15145003357 0007354 0 ustar 00 --TEST--
GH issue #22 (Segmentation fault with mailparse_msg_create())
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$data = <<<'EOF'
X-Original-To: plus@protonmail.dev
Received: from mail-test.protonmail.dev (mail-test.protonmail.dev [74.125.82.50])
by mail9i.protonmail.dev for <test@protonmail.dev>; Mon, 30 Apr 2018 13:03:00 +0000 (UTC)
To: ProtonMail Test <plus@protonmail.dev>
Subject: Buggy message
From: dummyaddress@domain.com
Date: Tue, 02 Aug 2022 20:53:51 -0400
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="MCBoundary=_12208022055093421"
--MCBoundary=_12208022055093421
Content-Type: multipart/related;
boundary="MCBoundary=_12208022055093431"
--MCBoundary=_12208022055093431
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8
hello part 1
--MCBoundary=_12208022055093431--
--MCBoundary=_12208022055093421
Content-Type: message/rfc822;
name="a name"
Content-Disposition: inline;
filename="a name"
Message-Id: <attach-12208022055093351@localhost>
Date: Tue, 02 Aug 2022 20:53:51 -0400
From: some@one.com
To: someone@protonmail.com
Subject: a subject
Content-Type: multipart/alternative;
boundary="MCBoundary=_12208022055093381"
--MCBoundary=_12208022055093381
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
hello other part
--MCBoundary=_12208022055093381
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable
hello again
--MCBoundary=_12208022055093381--
--MCBoundary=_12208022055093421--
EOF;
$resource = mailparse_msg_create();
$r = mailparse_msg_parse($resource, $data);
echo 'ok', PHP_EOL;
mailparse_msg_free($resource);
exit(0);
?>
--EXPECTF--
ok
tests/003.phpt 0000644 00000001125 15145003357 0007107 0 ustar 00 --TEST--
Check handling of multiple To headers
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$text = <<<EOD
To: fred@bloggs.com
To: wez@thebrainroom.com
hello, this is some text=hello.
EOD;
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $text);
$data = mailparse_msg_get_part_data($mime);
echo $data["headers"]["to"];
?>
--EXPECT--
fred@bloggs.com, wez@thebrainroom.com
tests/005.phpt 0000644 00000001664 15145003357 0007121 0 ustar 00 --TEST--
Check quoted-printable encoding generates S/MIME safe content
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$text = <<<EOD
To: fred@bloggs.com
blah blah blah From blah $ " & � blah blah blah blah blah
From the first of the month, things will be different!
blah blah blah From blah
Frome is a town in Somerset.
EOD;
$fp = tmpfile();
fwrite($fp, $text);
rewind($fp);
$fpdest = tmpfile();
mailparse_stream_encode($fp, $fpdest, "quoted-printable");
rewind($fpdest);
fpassthru($fpdest);
fclose($fp);
fclose($fpdest);
?>
--EXPECT--
To: fred@bloggs.com
blah blah blah From blah $ " & =A3 blah blah blah blah blah
=46rom the first of the month, things will be different!
blah blah blah From blah
Frome is a town in Somerset.
tests/bug74223.phpt 0000644 00000001301 15145003357 0007760 0 ustar 00 --TEST--
Fix #74233 (Parsing multi Content-Disposition causes memory leak)
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$msg = <<<EOD
Subject:
To: root@example.com
mime-version: 1.0
Content-Type: multipart/mixed; boundary="=___BOUNDARY___"
--=___BOUNDARY___
Content-Type: text/plain; charset=ISO-2022-JP
Content-Transfer-Encoding: 7bit
--=___BOUNDARY___
Content-Type: text/plain; name="test.txt"
Content-Disposition: attachment; filename="test.txt"
Content-Disposition: attachment; filename="test2.txt"
Content-Transfer-Encoding: base64
dGVzdA==
--=___BOUNDARY___--
EOD;
new MimeMessage('var', $msg) !== false;
?>
--EXPECT--
tests/006.phpt 0000644 00000004412 15145003357 0007114 0 ustar 00 --TEST--
Check extract_part_file
--SKIPIF--
<?php
/* vim600: sw=4 ts=4 fdm=marker syn=php
*/
if (!extension_loaded("mailparse")) @dl("mailparse.so");
if (!extension_loaded("mailparse")) print "skip"; ?>
--POST--
--GET--
--FILE--
<?php
if (!extension_loaded("mailparse")) @dl("mailparse.so");
$text = <<<EOD
To: fred@bloggs.com
Mime-Version: 1.0
Content-Type: text/plain
Subject: A simple MIME message
hello, this is some text hello.
blah blah blah.
EOD;
$fp = tmpfile();
fwrite($fp, $text);
rewind($fp);
$mime = mailparse_msg_create();
mailparse_msg_parse($mime, $text);
echo "Extract to output\n";
mailparse_msg_extract_part_file($mime, $fp);
echo "Extract and return as string\n";
$result = mailparse_msg_extract_part_file($mime, $fp, null);
echo "-->\n";
echo $result;
echo "\nExtract to open file\n";
$fpdest = tmpfile();
mailparse_msg_extract_part_file($mime, $fp, $fpdest);
echo "\nrewinding\n";
rewind($fpdest);
fpassthru($fpdest);
echo "\nExtract via user function\n";
$cbdata = "";
function callbackfunc($data) {
$GLOBALS["cbdata"] .= $data;
}
mailparse_msg_extract_part_file($mime, $fp, "callbackfunc");
echo "callback data is:\n";
var_dump($cbdata);
echo "\nExtract via Closure\n";
$cbdata = "";
$callbackfunc = function ($data) {
$GLOBALS["cbdata"] .= $data;
};
mailparse_msg_extract_part_file($mime, $fp, $callbackfunc);
echo "callback data is:\n";
var_dump($cbdata);
echo "\nExtract whole part to output\n";
mailparse_msg_extract_whole_part_file($mime, $fp);
echo "\nExtract part from string to output\n";
mailparse_msg_extract_part($mime, $text);
fclose($fpdest);
fclose($fp);
?>
--EXPECT--
Extract to output
hello, this is some text hello.
blah blah blah.
Extract and return as string
-->
hello, this is some text hello.
blah blah blah.
Extract to open file
rewinding
hello, this is some text hello.
blah blah blah.
Extract via user function
callback data is:
string(48) "hello, this is some text hello.
blah blah blah.
"
Extract via Closure
callback data is:
string(48) "hello, this is some text hello.
blah blah blah.
"
Extract whole part to output
To: fred@bloggs.com
Mime-Version: 1.0
Content-Type: text/plain
Subject: A simple MIME message
hello, this is some text hello.
blah blah blah.
Extract part from string to output
hello, this is some text hello.
blah blah blah.
tests/bug001.phpt 0000644 00000001255 15145003357 0007607 0 ustar 00 --TEST--
mailparse_msg_free causes double free segfault
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) print "skip"; ?>
--FILE--
<?php
$path = dirname(__FILE__) . '/testdata/m0001.txt';
$resource = mailparse_msg_parse_file($path);
$stream = fopen($path, 'r');
$structure = mailparse_msg_get_structure($resource);
$parts = array();
foreach ($structure as $part_id) {
$part = mailparse_msg_get_part($resource, $part_id);
$parts[$part_id] = mailparse_msg_get_part_data($part);
}
if (is_resource($stream)) {
fclose($stream);
}
if (is_resource($resource)) {
mailparse_msg_free($resource);
}
print 'No Segfault!' . PHP_EOL;
--EXPECT--
No Segfault!
tests/bug81422.phpt 0000644 00000000650 15145003357 0007765 0 ustar 00 --TEST--
Bug #81422 (Potential double-free in mailparse_uudecode_all())
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$data = <<<'EOD'
begin 644 foo
`
end
begin 644 bar
`
end
EOD;
$stream = fopen('php://memory', 'w+');
fwrite($stream, $data);
rewind($stream);
$parsed = mailparse_uudecode_all($stream);
var_dump(count($parsed));
?>
--EXPECT--
int(3)
tests/gh30.phpt 0000644 00000001505 15145003357 0007350 0 ustar 00 --TEST--
GH issue #30 Segmentation fault with UTF-8 encoded X-MS-Iris-MetaData header
--SKIPIF--
<?php
if (!extension_loaded("mailparse")) die("skip mailparse extension not available");
?>
--FILE--
<?php
$data = <<<'EOF'
From: aaa@example.com
To: bbb@example.com
Subject: Test
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
X-MS-Iris-MetaData: =?utf-8?q?{=22Type=22=3Anull=2C=22Fields=22=3A{=22InstanceId=22=3A=2290232a75aacb417581ef2a67?=
=?utf-8?q?0087e515=3A2=22=2C=22Market=22=3A=22en-gb=22=2C=22TopicId=22=3A=2220d3416a-aa91-4e58-a5?=
=?utf-8?q?bc-4a2be2a64934=22=2C=22Timestamp=22=3A=228=2F13=2F2023?= 6:01:40
AM"}}
Test
EOF;
$resource = mailparse_msg_create();
$r = mailparse_msg_parse($resource, $data);
echo 'ok', PHP_EOL;
mailparse_msg_free($resource);
exit(0);
?>
--EXPECTF--
ok
tests/testdata/rfc2231.exp 0000644 00000000776 15145003357 0011334 0 ustar 00 Message: rfc2231
Part 1
body-line-count => int(2)
charset => string(8) "us-ascii"
content-access-type => string(3) "URL"
content-base => string(1) "/"
content-title => string(74) "=?us-ascii?Q?This=20is=20even=20more=20=2A=2A=2Afun=2A=2A=2A=20?=isn't it!"
content-type => string(21) "message/external-body"
content-url => string(37) "http://pecl.php.net/package/mailparse"
ending-pos => int(489)
line-count => int(17)
starting-pos => int(0)
starting-pos-body => int(467)
transfer-encoding => string(4) "8bit"
tests/testdata/oeuue 0000644 00000002106 15145003357 0010566 0 ustar 00 Path: test.ru!not-for-mail
From: "mig" <mig@onlinemedia.ru>
Newsgroups: support
Subject: attch & OE
Date: Wed, 23 Apr 2003 17:15:48 +0500
Organization: test.ru | multi-purpose news-server
X-FUBAR-Lines: 22
Message-ID: <b8605k$e44$1@onlinemedia.ru>
NNTP-Posting-Host: mik
X-Trace: onlinemedia.ru 1051100148 14468 192.168.111.2 (23 Apr 2003 12:15:48 GMT)
X-Complaints-To: news@test.ru
NNTP-Posting-Date: Wed, 23 Apr 2003 12:15:48 +0000 (UTC)
X-Priority: 3
X-MSMail-Priority: Normal
X-Newsreader: Microsoft Outlook Express 6.00.2800.1106
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2800.1106
Xref: test.ru support:65
Hello!
Subj.
begin 644 README1.dat
M1F]O0F%R("T@0F%A86%A"@I297%U:7)E;65N=',Z(`H);R!P:'`@=VET:"!M
K86EL<&%R<V4*("`@(&\@=FER=7,@<V-A;FYE<B`H;W!T:6]N86PI"@D*"@``
`
end
begin 644 README2.dat
M1F]O0F%R("T@0F%A86%A"@I297%U:7)E;65N=',Z(`H);R!P:'`@=VET:"!M
K86EL<&%R<V4*("`@(&\@=FER=7,@<V-A;FYE<B`H;W!T:6]N86PI"@D*"@``
`
end
begin 644 README3.dat
M1F]O0F%R("T@0F%A86%A"@I297%U:7)E;65N=',Z(`H);R!P:'`@=VET:"!M
K86EL<&%R<V4*("`@(&\@=FER=7,@<V-A;FYE<B`H;W!T:6]N86PI"@D*"@``
`
end
tests/testdata/multimedia-demo.exp 0000644 00000057057 15145003357 0013332 0 ustar 00 Message: multimedia-demo
Part 1
body-line-count => int(25863)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(11) "owatagusiam"
content-type => string(15) "multipart/mixed"
ending-pos => int(1819395)
line-count => int(25876)
starting-pos => int(0)
starting-pos-body => int(390)
transfer-encoding => string(4) "8bit"
Part 1.1
body-line-count => int(3)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(11) "Explanation"
content-type => string(10) "text/plain"
ending-pos => int(650)
line-count => int(6)
starting-pos => int(404)
starting-pos-body => int(463)
transfer-encoding => string(4) "8bit"
Part 1.2
body-line-count => int(106)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "Rich Text demo"
content-type => string(14) "message/rfc822"
ending-pos => int(5532)
line-count => int(109)
starting-pos => int(665)
starting-pos-body => int(731)
transfer-encoding => string(4) "8bit"
Part 1.2.1
body-line-count => int(83)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(55) "Interpart_Boundary_AdJn:mu0M2YtJKaFh9AdJn:mu0M2YtJKaFk="
content-type => string(21) "multipart/alternative"
ending-pos => int(5532)
line-count => int(106)
starting-pos => int(731)
starting-pos-body => int(1913)
transfer-encoding => string(4) "8bit"
Part 1.2.1.1
body-line-count => int(16)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(3249)
line-count => int(17)
starting-pos => int(2497)
starting-pos-body => int(2498)
transfer-encoding => string(4) "8bit"
Part 1.2.1.2
body-line-count => int(19)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(57) "Alternative_Boundary_8dJn:mu0M2Yt5KaFZ8AdJn:mu0M2Yt1KaFdA"
content-type => string(15) "multipart/mixed"
ending-pos => int(4482)
line-count => int(22)
starting-pos => int(3308)
starting-pos-body => int(3411)
transfer-encoding => string(4) "8bit"
Part 1.2.1.2.1
body-line-count => int(13)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(13) "text/richtext"
ending-pos => int(4418)
line-count => int(16)
starting-pos => int(3471)
starting-pos-body => int(3544)
transfer-encoding => string(16) "quoted-printable"
Part 1.2.1.3
body-line-count => int(27)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(24) "application/andrew-inset"
ending-pos => int(5470)
line-count => int(29)
starting-pos => int(4540)
starting-pos-body => int(4580)
transfer-encoding => string(4) "8bit"
Part 1.3
body-line-count => int(7605)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(15) "Voice Mail demo"
content-type => string(14) "message/rfc822"
ending-pos => int(560279)
line-count => int(7608)
starting-pos => int(5546)
starting-pos-body => int(5613)
transfer-encoding => string(4) "8bit"
Part 1.3.1
body-line-count => int(7586)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(7) "Hi Mark"
content-type => string(11) "audio/basic"
ending-pos => int(560279)
line-count => int(7605)
starting-pos => int(5613)
starting-pos-body => int(6556)
transfer-encoding => string(6) "base64"
Part 1.4
body-line-count => int(465)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(11) "Flint phone"
content-type => string(11) "audio/basic"
ending-pos => int(596156)
line-count => int(469)
starting-pos => int(560293)
starting-pos-body => int(560387)
transfer-encoding => string(6) "base64"
Part 1.5
body-line-count => int(23)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(11) "MTR's photo"
content-type => string(9) "image/pbm"
ending-pos => int(598054)
line-count => int(27)
starting-pos => int(596171)
starting-pos-body => int(596263)
transfer-encoding => string(6) "base64"
Part 1.6
body-line-count => int(4565)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(15) "Star Trek Party"
content-type => string(14) "message/rfc822"
ending-pos => int(776452)
line-count => int(4568)
starting-pos => int(598069)
starting-pos-body => int(598136)
transfer-encoding => string(4) "8bit"
Part 1.6.1
body-line-count => int(4532)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(14) "Outermost_Trek"
content-type => string(15) "multipart/mixed"
ending-pos => int(776452)
line-count => int(4565)
starting-pos => int(598136)
starting-pos-body => int(599956)
transfer-encoding => string(4) "8bit"
Part 1.6.1.1
body-line-count => int(451)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(28) "Where_No_One_Has_Gone_Before"
content-type => string(15) "multipart/mixed"
ending-pos => int(631998)
line-count => int(453)
starting-pos => int(599973)
starting-pos-body => int(600042)
transfer-encoding => string(4) "8bit"
Part 1.6.1.1.1
body-line-count => int(16)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(600789)
line-count => int(17)
starting-pos => int(600073)
starting-pos-body => int(600074)
transfer-encoding => string(4) "8bit"
Part 1.6.1.1.2
body-line-count => int(426)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "He's dead, Jim"
content-type => string(11) "audio/x-sun"
ending-pos => int(631964)
line-count => int(430)
starting-pos => int(600821)
starting-pos-body => int(600918)
transfer-encoding => string(6) "base64"
Part 1.6.1.2
body-line-count => int(3418)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(28) "Where_No_Man_Has_Gone_Before"
content-type => string(15) "multipart/mixed"
ending-pos => int(729141)
line-count => int(3420)
starting-pos => int(632015)
starting-pos-body => int(632084)
transfer-encoding => string(4) "8bit"
Part 1.6.1.2.1
body-line-count => int(352)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(16) "Kirk/Spock/McCoy"
content-type => string(9) "image/gif"
ending-pos => int(657860)
line-count => int(356)
starting-pos => int(632115)
starting-pos-body => int(632212)
transfer-encoding => string(6) "base64"
Part 1.6.1.2.2
body-line-count => int(253)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(25) "Star Trek Next Generation"
content-type => string(9) "image/gif"
ending-pos => int(676411)
line-count => int(257)
starting-pos => int(657892)
starting-pos-body => int(657998)
transfer-encoding => string(6) "base64"
Part 1.6.1.2.3
body-line-count => int(2436)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(17) "application/x-be2"
content-version => string(2) "12"
ending-pos => int(720176)
line-count => int(2438)
starting-pos => int(676443)
starting-pos-body => int(676487)
transfer-encoding => string(4) "8bit"
Part 1.6.1.2.4
body-line-count => int(357)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(22) "application/atomicmail"
content-version => string(4) "1.12"
ending-pos => int(729107)
line-count => int(359)
starting-pos => int(720208)
starting-pos-body => int(720261)
transfer-encoding => string(4) "8bit"
Part 1.6.1.3
body-line-count => int(647)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "Distress calls"
content-type => string(11) "audio/x-sun"
ending-pos => int(776430)
line-count => int(651)
starting-pos => int(729158)
starting-pos-body => int(729255)
transfer-encoding => string(6) "base64"
Part 1.7
body-line-count => int(483)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "Digitizer test"
content-type => string(14) "message/rfc822"
ending-pos => int(862163)
line-count => int(486)
starting-pos => int(776466)
starting-pos-body => int(776532)
transfer-encoding => string(4) "8bit"
Part 1.7.1
body-line-count => int(457)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(24) "mail.sleepy.sau.144.8891"
content-type => string(15) "multipart/mixed"
ending-pos => int(862163)
line-count => int(483)
starting-pos => int(776532)
starting-pos-body => int(777838)
transfer-encoding => string(4) "8bit"
Part 1.7.1.1
body-line-count => int(0)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(777887)
line-count => int(1)
starting-pos => int(777865)
starting-pos-body => int(777866)
transfer-encoding => string(4) "8bit"
Part 1.7.1.2
body-line-count => int(433)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(12) "Bellcore mug"
content-type => string(9) "image/pgm"
ending-pos => int(861843)
line-count => int(439)
starting-pos => int(777915)
starting-pos-body => int(778102)
transfer-encoding => string(6) "base64"
Part 1.7.1.3
body-line-count => int(8)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(862131)
line-count => int(9)
starting-pos => int(861871)
starting-pos-body => int(861872)
transfer-encoding => string(4) "8bit"
Part 1.8
body-line-count => int(431)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(12) "More Imagery"
content-type => string(14) "message/rfc822"
ending-pos => int(936281)
line-count => int(434)
starting-pos => int(862177)
starting-pos-body => int(862241)
transfer-encoding => string(4) "8bit"
Part 1.8.1
body-line-count => int(406)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(23) "mail.sleepy.sau.158.532"
content-type => string(15) "multipart/mixed"
ending-pos => int(936281)
line-count => int(431)
starting-pos => int(862241)
starting-pos-body => int(863504)
transfer-encoding => string(4) "8bit"
Part 1.8.1.1
body-line-count => int(26)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(864751)
line-count => int(27)
starting-pos => int(863530)
starting-pos-body => int(863531)
transfer-encoding => string(4) "8bit"
Part 1.8.1.2
body-line-count => int(369)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(23) "Mail architecture slide"
content-type => string(9) "image/pbm"
ending-pos => int(936251)
line-count => int(374)
starting-pos => int(864778)
starting-pos-body => int(864934)
transfer-encoding => string(6) "base64"
Part 1.9
body-line-count => int(6438)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(15) "PostScript demo"
content-type => string(14) "message/rfc822"
ending-pos => int(1327933)
line-count => int(6441)
starting-pos => int(936295)
starting-pos-body => int(936362)
transfer-encoding => string(4) "8bit"
Part 1.9.1
body-line-count => int(6421)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "Captain Picard"
content-type => string(22) "application/postscript"
ending-pos => int(1327933)
line-count => int(6438)
starting-pos => int(936362)
starting-pos-body => int(937199)
transfer-encoding => string(4) "8bit"
Part 1.10
body-line-count => int(1015)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(21) "Quoted-Printable test"
content-type => string(9) "image/gif"
ending-pos => int(1405346)
line-count => int(1019)
starting-pos => int(1327947)
starting-pos-body => int(1328059)
transfer-encoding => string(16) "quoted-printable"
Part 1.11
body-line-count => int(1382)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(19) "q-p vs. base64 test"
content-type => string(14) "message/rfc822"
ending-pos => int(1507736)
line-count => int(1385)
starting-pos => int(1405361)
starting-pos-body => int(1405432)
transfer-encoding => string(4) "8bit"
Part 1.11.1
body-line-count => int(1368)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(8) "hal_9000"
content-type => string(15) "multipart/mixed"
ending-pos => int(1507736)
line-count => int(1382)
starting-pos => int(1405432)
starting-pos-body => int(1406106)
transfer-encoding => string(4) "8bit"
Part 1.11.1.1
body-line-count => int(807)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(21) "I'm sorry, Dave (q-p)"
content-type => string(11) "audio/basic"
ending-pos => int(1467518)
line-count => int(811)
starting-pos => int(1406117)
starting-pos-body => int(1406231)
transfer-encoding => string(16) "quoted-printable"
Part 1.11.1.2
body-line-count => int(549)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(24) "I'm sorry, Dave (BASE64)"
content-type => string(11) "audio/basic"
ending-pos => int(1507722)
line-count => int(553)
starting-pos => int(1467530)
starting-pos-body => int(1467637)
transfer-encoding => string(6) "base64"
Part 1.12
body-line-count => int(3282)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(22) "Multiple encapsulation"
content-type => string(14) "message/rfc822"
ending-pos => int(1819378)
line-count => int(3285)
starting-pos => int(1507750)
starting-pos-body => int(1507824)
transfer-encoding => string(4) "8bit"
Part 1.12.1
body-line-count => int(3271)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(36) "16819560-2078917053-688350843:#11603"
content-type => string(15) "multipart/mixed"
ending-pos => int(1819378)
line-count => int(3282)
starting-pos => int(1507824)
starting-pos-body => int(1508362)
transfer-encoding => string(4) "8bit"
Part 1.12.1.1
body-line-count => int(861)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "The Simpsons!!"
content-type => string(22) "application/postscript"
ending-pos => int(1560994)
line-count => int(865)
starting-pos => int(1508401)
starting-pos-body => int(1508509)
transfer-encoding => string(6) "base64"
Part 1.12.1.2
body-line-count => int(299)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(28) "Alice's PDP-10 w/ TECO & DDT"
content-name => string(13) "Alices_PDP-10"
content-type => string(6) "binary"
ending-pos => int(1579392)
line-count => int(303)
starting-pos => int(1561034)
starting-pos-body => int(1561161)
transfer-encoding => string(6) "base64"
Part 1.12.1.3
body-line-count => int(2094)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(12) "Going deeper"
content-type => string(14) "message/rfc822"
ending-pos => int(1819337)
line-count => int(2097)
starting-pos => int(1579432)
starting-pos-body => int(1579496)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1
body-line-count => int(2087)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(12) "foobarbazola"
content-type => string(15) "multipart/mixed"
ending-pos => int(1819337)
line-count => int(2094)
starting-pos => int(1579496)
starting-pos-body => int(1579726)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1.1
body-line-count => int(7)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(1580054)
line-count => int(8)
starting-pos => int(1579741)
starting-pos-body => int(1579742)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1.2
body-line-count => int(838)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(13) "seconddivider"
content-type => string(18) "multipart/parallel"
ending-pos => int(1739553)
line-count => int(840)
starting-pos => int(1580070)
starting-pos-body => int(1580127)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1.2.1
body-line-count => int(16)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(5) "Bunny"
content-type => string(9) "image/gif"
ending-pos => int(1583489)
line-count => int(20)
starting-pos => int(1580143)
starting-pos-body => int(1580229)
transfer-encoding => string(6) "base64"
Part 1.12.1.3.1.2.2
body-line-count => int(807)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(14) "TV Theme songs"
content-type => string(11) "audio/basic"
ending-pos => int(1739502)
line-count => int(811)
starting-pos => int(1583506)
starting-pos-body => int(1583603)
transfer-encoding => string(6) "base64"
Part 1.12.1.3.1.3
body-line-count => int(195)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(22) "application/atomicmail"
ending-pos => int(1744335)
line-count => int(197)
starting-pos => int(1739568)
starting-pos-body => int(1739606)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1.4
body-line-count => int(1031)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(27) "Yet another level deeper..."
content-type => string(14) "message/rfc822"
ending-pos => int(1819320)
line-count => int(1034)
starting-pos => int(1744351)
starting-pos-body => int(1744430)
transfer-encoding => string(4) "8bit"
Part 1.12.1.3.1.4.1
body-line-count => int(1023)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-description => string(13) "I'm Twying..."
content-type => string(11) "audio/x-sun"
ending-pos => int(1819320)
line-count => int(1031)
starting-pos => int(1744430)
starting-pos-body => int(1744660)
transfer-encoding => string(6) "base64"
tests/testdata/rfc2231.txt 0000644 00000000751 15145003357 0011350 0 ustar 00 Return-Path: <wez@thebrainroom.com>
From: "Wez Furlong" <wez@thebrainroom.com>
To: <wez@thebrainroom.com>
Subject: mime attach
Date: Sat, 7 Sep 2002 12:41:14 +0100
Message-ID: <000601c25663$78b7fcf0$0702a8c0@TITAN>
MIME-Version: 1.0
Content-Type: message/external-body; access-type=URL;
URL*0="http://pecl.php.net/";
URL*1="package";
URL*2="/mailparse";
title*0*=us-ascii'en'This%20is%20even%20more%20;
title*1*=%2A%2A%2Afun%2A%2A%2A%20;
title*2="isn't it!"
This is not the Body
tests/testdata/uue.txt 0000644 00000001661 15145003357 0011065 0 ustar 00 Return-Path: <wez@thebrainroom.com>
Received: from TITAN (titan.brainnet.i [192.168.2.7])
by zaneeb.brainnet.i (8.10.2/8.10.2/SuSE Linux 8.10.0-0.3) with ESMTP id g87Be5721229
for <wez@thebrainroom.com>; Sat, 7 Sep 2002 12:40:05 +0100
X-Authentication-Warning: zaneeb.brainnet.i: Host titan.brainnet.i [192.168.2.7] claimed to be TITAN
From: "Wez Furlong" <wez@thebrainroom.com>
To: <wez@thebrainroom.com>
Subject: UUEncoded attachments
Date: Sat, 7 Sep 2002 12:39:55 +0100
Message-ID: <000001c25663$4cd5b460$0702a8c0@TITAN>
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook, Build 10.0.2627
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-TBR-DestBox: user.wez (auth as wez) (wez:)
Hello, this is a message with UUE attachments.
begin 644 README.dat
M1F]O0F%R("T@0F%A86%A"@I297%U:7)E;65N=',Z(`H);R!P:'`@=VET:"!M
K86EL<&%R<V4*("`@(&\@=FER=7,@<V-A;FYE<B`H;W!T:6]N86PI"@D*"@``
`
end
tests/testdata/uue.exp 0000644 00000000436 15145003357 0011041 0 ustar 00 Message: uue
Part 1
body-line-count => int(10)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-type => string(10) "text/plain"
ending-pos => int(945)
line-count => int(27)
starting-pos => int(0)
starting-pos-body => int(743)
transfer-encoding => string(4) "8bit"
tests/testdata/phpcvs1.txt 0000644 00000012244 15145003357 0011652 0 ustar 00 Return-Path: <php-cvs-return-15542-wez.php.cvs=thebrainroom.com@lists.php.net>
Received: from secure.thebrainroom.com (raq338.uk2net.com [213.239.42.171])
by zaneeb.brainnet.i (8.10.2/8.10.2/SuSE Linux 8.10.0-0.3) with ESMTP id g9SLLB208234
for <wez.php.cvs@thebrainroom.com>; Mon, 28 Oct 2002 21:21:11 GMT
X-Authentication-Warning: zaneeb.brainnet.i: Host raq338.uk2net.com [213.239.42.171] claimed to be secure.thebrainroom.com
Received: from pb1.pair.com (pb1.pair.com [216.92.131.4])
by secure.thebrainroom.com (8.9.3/8.9.3) with SMTP id SAA02428
for <wez.php.cvs@thebrainroom.com>; Mon, 28 Oct 2002 18:50:26 GMT
Received: (qmail 63230 invoked by uid 1010); 28 Oct 2002 18:36:34 -0000
Mailing-List: contact php-cvs-help@lists.php.net; run by ezmlm
Precedence: bulk
list-help: <mailto:php-cvs-help@lists.php.net>
list-unsubscribe: <mailto:php-cvs-unsubscribe@lists.php.net>
list-post: <mailto:php-cvs@lists.php.net>
Delivered-To: mailing list php-cvs@lists.php.net
Received: (qmail 63215 invoked from network); 28 Oct 2002 18:36:33 -0000
Reply-to: marcus.boerger@post.rwth-aachen.de
Message-Id: <5.1.0.14.2.20021028193555.01d47c20@mailbox.rwth-aachen.de>
X-Mailer: QUALCOMM Windows Eudora Version 5.1
Date: Mon, 28 Oct 2002 19:36:10 +0100
To: Melvyn Sopacua <msopacua@idg.nl>
From: marcus.boerger@t-online.de (Marcus =?iso-8859-1?Q?B=F6rger?=)
Cc: php-cvs@lists.php.net
In-Reply-To: <5.1.0.14.2.20021028192151.039729e0@yoshimo.webtechs.idg.nl
>
References: <5.1.0.14.2.20021028190015.01d4d650@mailbox.rwth-aachen.de>
<5.1.0.14.2.20021028183051.03c18958@yoshimo.webtechs.idg.nl>
<cvshelly1035825322@cvsserver>
Mime-Version: 1.0
Content-Type: multipart/alternative;
boundary="=====================_71195359==_.ALT"
X-Sender: 520072483730-0001@t-dialin.net
X-Spam-Status: No, tests=bogofilter, spamicity=0.0% likelihood
Subject: Re: [PHP-CVS] cvs: php4 /ext/iconv/tests
X-TBR-DestBox: user.wez.php.cvs (auth as wez) (wez.php.cvs:)
--=====================_71195359==_.ALT
Content-Type: text/plain; charset="iso-8859-1"; format=flowed
Content-Transfer-Encoding: quoted-printable
Then what about:
cvs -z3 -q diff skipif.inc test.inc (in directory=20
S:\php4-HEAD\ext\iconv\tests\)
Index: skipif.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /repository/php4/ext/iconv/tests/skipif.inc,v
retrieving revision 1.2
diff -u -r1.2 skipif.inc
--- skipif.inc 28 Oct 2002 17:15:21 -0000 1.2
+++ skipif.inc 28 Oct 2002 18:35:25 -0000
@@ -1,10 +1,11 @@
<?php
// This script prints "skip" if condition does not meet.
-if (!extension_loaded("iconv") && ini_get("enable_dl")) {
- $dlext =3D (substr(PHP_OS, 0, 3) =3D=3D "WIN") ? ".dll" : ".so";
- @dl("iconv$dlext");
-}
+// Do not dl load extension
+//if (!extension_loaded("iconv") && ini_get("enable_dl")) {
+// $dlext =3D (substr(PHP_OS, 0, 3) =3D=3D "WIN") ? ".dll" : ".so";
+// @dl("iconv$dlext");
+//}
if (!extension_loaded("iconv")) {
die("skip iconv extension not available\n");
}
Index: test.inc
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /repository/php4/ext/iconv/tests/test.inc,v
retrieving revision 1.1
diff -u -r1.1 test.inc
--- test.inc 28 Oct 2002 17:15:21 -0000 1.1
+++ test.inc 28 Oct 2002 18:35:25 -0000
@@ -1,8 +1,7 @@
<?php
-// This script prints "skip" if condition does not meet.
-
-if (!extension_loaded("iconv") && ini_get("enable_dl")) {
- $dlext =3D (substr(PHP_OS, 0, 3) =3D=3D "WIN") ? ".dll" : ".so";
- @dl("iconv$dlext");
-}
+// Do not dl load extension
+//if (!extension_loaded("iconv") && ini_get("enable_dl")) {
+// $dlext =3D (substr(PHP_OS, 0, 3) =3D=3D "WIN") ? ".dll" : ".so";
+// @dl("iconv$dlext");
+//}
?>
At 19:30 28.10.2002, Melvyn Sopacua wrote:
>At 19:01 28-10-2002, Marcus B=F6rger wrote:
>
>>At 18:33 28.10.2002, Melvyn Sopacua wrote:
>>>At 18:15 28-10-2002, Marcus B=F6rger wrote:
>>>
>>>> Log:
>>>> fix this tests
>>>> -they did not dl load module in test....
>>>
>>>Yes, exactly as they shouldn't.
>>>
>>>It's been discussed. Why did you revert that?
>>>
>>>The main reason - to repeat it:
>>>./configure --prefix=3D/previous/install
>>>
>>>dl('foo.so') =3D> foo.so version is previous install, not current!
>>
>>I did so because skipif.inc did so. Maybe we remove that code
>>from both skipif.inc and test.inc now. Feel free to do that.
>
>Ok, then that was a left over.
>
>IMHO we should do a complete overhaul of */tests/* and remove any dl()
>code, or come up with something, that will force the modules/ directory
>on the testkit.
>
>This is again a good reason to setup php.ini-test.
>Windows will then be a problem, which kinda makes the dl() thingy=
troublesome
>as well.
>
>The only thing I can think of to work around it, is to use a configure
>option, that writes --with-test-modules-dir=3D into php.ini-test. But=
that's
>prolly overkill.
>
>
>
>Met vriendelijke groeten / With kind regards,
>
>Webmaster IDG.nl
>Melvyn Sopacua
>
--=====================_71195359==_.ALT--
tests/testdata/phpcvs1.exp 0000644 00000001441 15145003357 0011624 0 ustar 00 Message: phpcvs1
Part 1
body-line-count => int(105)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(37) "=====================_71195359==_.ALT"
content-type => string(21) "multipart/alternative"
ending-pos => int(5284)
line-count => int(141)
starting-pos => int(0)
starting-pos-body => int(1940)
transfer-encoding => string(4) "8bit"
Part 1.1
body-line-count => int(98)
charset => string(10) "iso-8859-1"
content-base => string(1) "/"
content-charset => string(10) "iso-8859-1"
content-format => string(6) "flowed"
content-type => string(10) "text/plain"
ending-pos => int(5240)
line-count => int(101)
starting-pos => int(1980)
starting-pos-body => int(2087)
transfer-encoding => string(16) "quoted-printable"
tests/testdata/mime.txt 0000644 00000002641 15145003357 0011215 0 ustar 00 Return-Path: <wez@thebrainroom.com>
Received: from TITAN (titan.brainnet.i [192.168.2.7])
by zaneeb.brainnet.i (8.10.2/8.10.2/SuSE Linux 8.10.0-0.3) with ESMTP id g87BfJ721279
for <wez@thebrainroom.com>; Sat, 7 Sep 2002 12:41:19 +0100
X-Authentication-Warning: zaneeb.brainnet.i: Host titan.brainnet.i [192.168.2.7] claimed to be TITAN
From: "Wez Furlong" <wez@thebrainroom.com>
To: <wez@thebrainroom.com>
Subject: mime attach
Date: Sat, 7 Sep 2002 12:41:14 +0100
Message-ID: <000601c25663$78b7fcf0$0702a8c0@TITAN>
MIME-Version: 1.0
Content-Type: multipart/mixed;
boundary="----=_NextPart_000_0007_01C2566B.DA7C64F0"
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook, Build 10.0.2627
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2600.0000
X-TBR-DestBox: user.wez (auth as wez) (wez:)
This is a multi-part message in MIME format.
------=_NextPart_000_0007_01C2566B.DA7C64F0
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: 7bit
this is a message with regular mime attachment.
------=_NextPart_000_0007_01C2566B.DA7C64F0
Content-Type: application/octet-stream;
name="README"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="README"
FooBar - blah blah blah foo bar bar baaaa=0A=
=0A=
Requirements: =0A=
o php with mailparse=0A=
o virus scanner (optional)=0A=
=0A=
=0A=
------=_NextPart_000_0007_01C2566B.DA7C64F0--
tests/testdata/qp.exp 0000644 00000002272 15145003357 0010663 0 ustar 00 Message: qp
Part 1
body-line-count => int(27)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-boundary => string(41) "----=_NextPart_000_0003_01C2566B.C7AC6A50"
content-type => string(15) "multipart/mixed"
ending-pos => int(1438)
line-count => int(47)
starting-pos => int(0)
starting-pos-body => int(839)
transfer-encoding => string(4) "8bit"
Part 1.1
body-line-count => int(1)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-charset => string(8) "us-ascii"
content-type => string(10) "text/plain"
ending-pos => int(1048)
line-count => int(5)
starting-pos => int(929)
starting-pos-body => int(1008)
transfer-encoding => string(4) "7bit"
Part 1.2
body-line-count => int(7)
charset => string(8) "us-ascii"
content-base => string(1) "/"
content-disposition => string(10) "attachment"
content-name => string(6) "README"
content-type => string(24) "application/octet-stream"
disposition-filename => string(6) "README"
ending-pos => int(1389)
line-count => int(13)
starting-pos => int(1093)
starting-pos-body => int(1245)
transfer-encoding => string(16) "quoted-printable"
tests/testdata/multimedia-demo.txt.gz 0000644 00003323475 15145003357 0013777 0 ustar 00 ���= multimedia-demo.txt �Y��J�&_�����骗<��C#�k�6Ɛ F���[�ɩ�2�����;v���!�k�gp��4��h����\���Q~w�����q|��$���>�
��L>��!R��U�%���݇�s��?��� ��?���m�
84h����V����&��;�a�D����"��G<�8)^e�5A��~q��9-��I��H~�&M��C�U���K��g��^_gg�t�y�� _}����A|��#(>�cҶ�w��.���]��
�jگ�FDU���<��ͯQ���s������]���dq�/��xH������ϗ�
:�q���-�Ug��� �ܙ�`��Q�*ʟY�8�h?�௦�~?ZM��|��#)��j���
����c>�s�4�G�*�<�x���j���o���G77ٽ>�!i���}��;h�P�����L��8S���ǿ��p\�ϟ�5:m��$��8=�������9�DɃ%�tN�QQ�k�wߐs�>�������A�UU���\-?N {��Nү��ǏG��)��F�ˇ�'����U}P�CP~�H���j�/���N@;
E��N�U@���������ӈ@�"��F�ߋ���>;=���U�&y���W߿�qY�{���w�$eط�����?ȿ�H����O���TÒ�O�x$]�����ˎ��. �%h��t�_6<���mX�k.�,(
��uy��ů�WY��l~ڿ���3�կ��w��kۗ��}��?Hx<�
i������_����'`�z:c�2c�z��rm�/�GYG�֙�`�Y��o� ���~C3��A�H���)�Y�lÿӂ��g7��?v�I"^�� �Wh�33̠ �fG����?����|�X��w��F�����F�����~x�_ɏ?� :����G�h���I���D�{�~���H�?`v 5?�����,��'A�2Nb���W��A�]�1���x�$��^h�j��1�n���
�珓>x�A��s���}�I�[G
8g��� ��� f���ӌ��w���W����.�_�:6~���c���;��ݠk�ߏ�>����G97P}7�u��{���� ���~�NБ������x?j�K`<A
��}Y���m���?&�G�(���-8�����U��"�s�����ν�O�������~n����ca��yn�j��m����w&$�� x��i1O�ߘ=�r���~,��<�Pf������!��0��������O3�ʀ�� ��r(�|���?3�� ��>�=ǭ�Fѵ���cS�t���`�>1�v���߯��T���/�0[���?r�?}|�C�y�;����uD����?��?o�=�8�0�3�0N�N~~~��w�L�d���ʏx��fW��go{��4�_=l�<�<W �W<��*�"��>���'*Ə�1����t�=��_~��N���\�9�?�<�s�~��}�<h���ܣ"�#�h�y�MZ0J8���1�w?�Q����?��K۽�ꧼ�O0���^O���c��H�pgΛ9�p�?�
�V�s��o����?ϝ�- �~C����3�O��d0��ǜ9?�2���>�.�s���>��@��=�(C�sz��3o���/N��)}�/�7���;�����tq�%Ԁ���s�P�V�_�e�Q�u�����j`�s��K�����_��~�$��C��E�?���w ����b�W�/�S���H�����
*?gF>�_��6�9�p��qn���! q�>�=�-��7C�#� �CH��H�G��㯡���X4������_�o��o`TU��~r�i�G�&��0����[��H~'�DR�q�}�g�a���(��
�>�����Հ���X�g�����.��WܿE~��57������q�I�p��/N�V#���#p�aA��р���I�G ������(��`�F�����7d��-�]_�hN�?,���1�U���������Q?��_�t����<�����9������:r��?���2����l�?�09?�N�U���o.�I\R%��qIM����g���^�����^�k,P��/6L�����f���U�_��� �"+kD��%�#����&hXQ~[Ț��������Q��^?֫璙 ���on �?-�����>���؏�[KI��EEQ4Q��_�������O?�9���^��Y��M�Y��gP�����>~�P���_�p@���l��o���m�b|c7/�mW��#p����$i��#��AM���{ ��7ob�M �m��Η:%܊����GLcvM,�'x!�$}jl©��>Ց�iC<�q�+A��<y��$�2�%��3� �K�=��-�y �*+�d����I�/��DŽu$a�ƒ"j ky8�J�J�Ғ� ����cT�p��\EC��nv��=��[���
b���*e�-�Q�˱>�/.�:��&!�2�T���wJR�T]g�!�>,�)q�*؞J�O��4��iCL~�{�i����@��ۼ����Q��j�f�:9�KD���uY����]�y�nNSV��מOuᓔ�>�<S�r�!DT�6|Z"�/q��
M�|H
�C,�1�5ʣ�SzR�.�M�K�;(D�ʎ�1�*�GFGp��G0���g�m|鉄5r(u�'���@���DS�a)�|lc��^IKSM�+��>ƌP�Rs:�V��,�Pk�ɴdG�\����n��hA�l���(�6b��8��2D�U0���l� Ux�1�0�+��)�n���I0J��B��OZ�.1��[ʇ��<�B��&F�Փl��fH�]
9�'ޠq�j�V鱖����
�I#�
�5�G*�g�s5e�m�ۡIӔ�R=ް4�U.A�#�.{HK;�&Y�3MH�ȸ"t�:�p&�ٺS0R�D^��t�8���KS��Q�����1"�V�Zf� �F��|%I�P~�Ɨ� �+�6���IR۠��W4���E*(TH#L(r�����Rg"�=甚���
��Q\z=-��ʸqB z�y"�B��r�/�z;��$��SX��fe��S Y>kH����fIZʉm��ʀ� '���ዛ!OE�"'i
s���F���B�z�3�#�I�Sڇ[�"�a�/+%aw{'�N����5�I�A�PI#��y�������^~���5qJ@���ȗ> ��$��'�FT������"�6���-U�Te�!�q�DJ��gҰ@��BF#�U�r sN%�2�OӉ!�
Pb���K.�'�R��{! CM]�x�z�(<j՞A�}�S%���cSHL���w)tEƅnU�����~dԲeԄ�B�+$e�� ���1�� y��#�,*��S%Ց��lB�vj�Gj� o���5��RT�� PA��#��XD��'�����;9NE��Sͩ}�T���Up"��[H�f"���]L =^3Ӥ3� ֩�W�0��1�#}3�8WL�����C L|�L���"x;sY� �`x� �� o�H�JI)*pTn)�Π���2�)AaK� �A��6DT�X:�z�C��]�L�J D #���X�P(�`@�)�~� �h`U�
6A��L�<_�j��^1���$�
�ܨ�*٥eP����� ��c��R�{Ș��"9
�h1G�k�B��D��4R=V����ĞI/�@�/
��^�S{���H7�w@����~�1Ma9�fJj3�@E��$��FE^ �d~y�e
�'Lz�NE�x��&�ɔ'5�7o��;��m�{�
� SE���C܈��TM��E�Pz' �Ű���C���"���U9�S��*$�@=�&|T�}
�A������{H��3��+�V<��\X"���%�P�h4�����(�C�$���u�D�x ��� r@(%t&y�VԨ�7�h�2�1�R��ˆXD�RC�B:� �&��+Б�G���>�O�o*���5g�ʥX�Ļ� v
�;���AK\
��T-i�XO�H�
K>��#�;��-!{��裪�g,�&����)s�x��,̋e�L�Bj�c��Q�c*���H���Py<��8�@
B2��:H��('(ɚ^��{H:�����%Ӡ�x��ET F�ϣ2mY���N�۞�x�����[ �`L{�9h �cu���Z@�z��f]k� �BoƁ��(SA�) �2PL���̗���!@�Z��v;�A�Ԡm ��r��J�R�A�T��!k6CH
@�,��
$r�f<�ߘ��͠��$m��Ja�(|?�*��<��R-�5��cX`0`"�HC���+N��72ew�Z mx(�?e�z-A,a�c�̥%�S�$$���L�R ��mC���;�>���*\K3����Fe�����DQ�8�+�_n���7���A� ��q�t�*k��ԙJX���`�)#�F?�!�W!��� *(h�����'i� @���̔f ��x�������2���8�AA?W�9IU�6�
����%e3�
��Y�
"$���,�W!�I�{�R����_A}RЏ*V^���!s
�y@��q6\���O���W+��D���\� ���Ô< �C�b5B��nK$�]R��o�c�_�>l��a��p,��E�&.���q�=�����0�I@���5�4f��s�E ���Uj�ǐ�{�l>+c�uC�
��9�d���+�{�����I��E�'���$$=j�R� h$.��0�VP!�n�)�A��&�7w�z
G$�d�(�0)� �FNA"