Re: Mail_Mime patches
| From: | till | Date: | Wed, 16 Dec 2009 13:04:47 +0000 |
| Subject: | Re: Mail_Mime patches | ||
| References: | 1 2 3 4 5 6 | Groups: | php.pear.dev php.pear.qa |
| Request: | Send a blank email to pear-dev+get-53112@lists.php.net to get a copy of this message | ||
On Wed, Dec 16, 2009 at 11:45 AM, A.L.E.C <alec@alec.pl> wrote:
> till wrote:
>>
>> Alec,
>>
>> just wondering, did anyone tell you to open an account?
>
> What you mean "to open"? I've got an account.
Yeah, cause I nudged people on IRC. ;-)
Generally, the procedure for a new contributor/maintainer is to attach
patches to bugs so we can see what you are up to.
> "Your SVN account (alec) was created.
>
> You should be able to log into the SVN server within the hour, and
> your alec@php.net forward to alec@alec.pl should
> be active within the next 24 hours."
>
>> Usually, you need to contribute patches before karma is granted.
>
> There are some of my patches in bugtracker. I should sent them here?
> Attached a diff for change that I was trying to commit first.
>
> --
> Aleksander 'A.L.E.C' Machniak http://alec.pl
> gg:2275252
> LAN Management System Developer http://lms.org.pl
> Roundcube Webmail Developer http://roundcube.net
>
> Index: tests/test_Bug_14529.phpt
> ===================================================================
> --- tests/test_Bug_14529.phpt (wersja 0)
> +++ tests/test_Bug_14529.phpt (wersja 0)
> @@ -0,0 +1,15 @@
> +--TEST--
> +Bug #14529: basename() workaround
> +--SKIPIF--
> +--FILE--
> +<?php
> +error_reporting(E_ALL); // ignore E_STRICT
> +include "Mail/mime.php";
> +$m = new Mail_mime();
> +// some text with polish Unicode letter at the beginning
> +$path = "/path/";
> +$filename = $path . base64_decode("xZtjaWVtYQ==");
> +print_r(base64_encode($m->_basename($filename)));
> +?>
> +--EXPECT--
> +xZtjaWVtYQ==
> Index: mime.php
> ===================================================================
> --- mime.php (wersja 292187)
> +++ mime.php (kopia robocza)
> @@ -350,7 +350,7 @@
> $err = PEAR::raiseError($msg);
> return $err;
> }
> - $filename = basename($filename);
> + $filename = $this->_basename($filename);
> if (PEAR::isError($filedata)) {
> return $filedata;
> }
> @@ -391,16 +391,16 @@
> $err = PEAR::raiseError('File is not readable: ' . $file_name);
> return $err;
> }
> -
> +
> //Temporarily reset magic_quotes_runtime and read file contents
> if ($magic_quote_setting = get_magic_quotes_runtime()) {
> set_magic_quotes_runtime(0);
> }
> - $cont = file_get_contents($file_name);
> + $cont = file_get_contents($file_name);
> if ($magic_quote_setting) {
> set_magic_quotes_runtime($magic_quote_setting);
> }
> -
> +
> return $cont;
> }
>
> @@ -465,7 +465,7 @@
> {
> $params = array();
> $params['content_type'] = 'multipart/mixed';
> -
> +
> //Create empty multipart/mixed Mail_mimePart object to return
> $ret = new Mail_mimePart('', $params);
> return $ret;
> @@ -587,9 +587,9 @@
> * @access public
> */
> function getMessage(
> - $separation = null,
> - $build_params = null,
> - $xtra_headers = null,
> + $separation = null,
> + $build_params = null,
> + $xtra_headers = null,
> $overwrite = false
> )
> {
> @@ -640,7 +640,7 @@
> $this->_build_params[$key] = $value;
> }
> }
> -
> +
> if (isset($this->_headers['From'])){
> //Bug #11381: Illegal characters in domain ID
> if (preg_match("|(@[0-9a-zA-Z\-\.]+)|",
> $this->_headers['From'],
> $matches)){
> @@ -652,7 +652,7 @@
> $this->_html_images[$i]['cid'] =
> $this->_html_images[$i]['cid'] . $domainID;
> }
> }
> -
> +
> if (count($this->_html_images) AND isset($this->_htmlbody)) {
> foreach ($this->_html_images as $key => $value) {
> $regex = array();
> @@ -666,8 +666,8 @@
> $rep[] = 'url(\1cid:' . $value['cid'] .
> '\1)';
>
> $this->_htmlbody = preg_replace($regex, $rep,
> $this->_htmlbody);
> - $this->_html_images[$key]['name'] =
> - basename($this->_html_images[$key]['name']);
> + $this->_html_images[$key]['name'] =
> +
> $this->_basename($this->_html_images[$key]['name']);
> }
> }
>
> @@ -757,7 +757,7 @@
>
> if (isset($message)) {
> $output = $message->encode();
> -
> +
> $this->_headers = array_merge($this->_headers,
> $output['headers']);
> $body = $output['body'];
> @@ -813,7 +813,7 @@
> function txtHeaders($xtra_headers = null, $overwrite = false)
> {
> $headers = $this->headers($xtra_headers, $overwrite);
> -
> +
> $ret = '';
> foreach ($headers as $key => $val) {
> $ret .= "$key: $val" . MAIL_MIME_CRLF;
> @@ -914,7 +914,6 @@
> */
> function _encodeHeaders($input, $params = array())
> {
> -
> $build_params = $this->_build_params;
> while (list($key, $value) = each($params)) {
> $build_params[$key] = $value;
> @@ -926,11 +925,11 @@
> //$hdr_value_out: The recombined $hdr_val-atoms, or the encoded
> string.
> //Note: Atom as specified here is not exactly the same as an RFC822
> atom,
> //as $atom's may contain just a single space.
> -
> - $useIconv = true;
> +
> + $useIconv = true;
> if (isset($build_params['ignore-iconv'])) {
> $useIconv = !$build_params['ignore-iconv'];
> - }
> + }
> foreach ($input as $hdr_name => $hdr_value) {
> /*
> $parts = preg_split('/([ ])/', $hdr_value, -1,
> PREG_SPLIT_DELIM_CAPTURE);
> @@ -960,14 +959,14 @@
> $imePrefs['output-charset'] =
> $build_params['head_charset'];
> $imePrefs['line-length'] = 74;
> $imePrefs['line-break-chars'] = "\r\n";
> //Specified in
> RFC2047
> -
> +
> $hdr_value = iconv_mime_encode($hdr_name, $hdr_value,
> $imePrefs);
> $hdr_value = preg_replace("#^{$hdr_name}\:\ #",
> "",
> $hdr_value);
> } elseif ($build_params['head_encoding'] ==
> 'base64') {
> //Base64 encoding has been selected.
> //Base64 encode the entire string
> $hdr_value = base64_encode($hdr_value);
> -
> +
> //Generate the header using the specified params and
> dynamicly
> //determine the maximum length of such strings.
> //75 is the value specified in the RFC. The first -2 is
> there so
> @@ -983,7 +982,7 @@
> //we can get must be rounded down..
> $maxLength = $maxLength - ($maxLength % 4);
> $maxLength1stLine = $maxLength1stLine -
> ($maxLength1stLine % 4);
> -
> +
> $cutpoint = $maxLength1stLine;
> $hdr_value_out = $hdr_value;
> $output = "";
> @@ -992,10 +991,10 @@
> $part = substr($hdr_value_out, 0, $cutpoint);
> $hdr_value_out = substr($hdr_value_out, $cutpoint);
> $cutpoint = $maxLength;
> - //RFC 2047 specifies that any split header should
> + //RFC 2047 specifies that any split header should
> //be seperated by a CRLF SPACE.
> if ($output) {
> - $output .= "\r\n ";
> + $output .= "\r\n ";
> }
> $output .= $prefix . $part . $suffix;
> }
> @@ -1019,7 +1018,7 @@
> $hdr_value = substr($hdr_value, 0, -1);
> $quoteSuffix = '"';
> }
> -
> +
> //Generate the header using the specified params and
> dynamicly
> //determine the maximum length of such strings.
> //75 is the value specified in the RFC. The -2 is there
> so
> @@ -1031,12 +1030,12 @@
> $maxLength = 75 - strlen($prefix . $suffix) - 2 - 1;
> $maxLength1stLine = $maxLength - strlen($hdr_name) - 2;
> $maxLength = $maxLength - 1;
> -
> +
> //Replace all special characters used by the encoder.
> $search = array('=', '_',
> '?', ' ');
> $replace = array('=3D', '=5F',
> '=3F', '_');
> $hdr_value = str_replace($search, $replace, $hdr_value);
> -
> +
> //Replace all extended characters (\x80-xFF) with their
> //ASCII values.
> $hdr_value = preg_replace('#([\x80-\xFF])#e',
> @@ -1050,7 +1049,6 @@
> //Fix for Bug #10298, Ota Mares <om@viazenetti.de>
> //Concat the double quotes and encoded string together
> $hdr_value = $quotePrefix . $hdr_value . $quoteSuffix;
> -
>
> $hdr_value_out = $hdr_value;
> $realMax = $maxLength1stLine + strlen($prefix .
> $suffix);
> @@ -1062,11 +1060,11 @@
> //Split translated string at every $maxLength
> //But make sure not to break any translated
> chars.
> $found = preg_match($reg, $hdr_value_out,
> $matches);
> -
> +
> //After this first line, we need to use a
> different
> //regexp for the first line.
> $reg = $reg2nd;
> -
> +
> //Save the found part and encapsulate it in the
> //prefix & suffix.. Then remove the part from the
> //$hdr_value_out variable.
> @@ -1078,11 +1076,11 @@
> $part = $hdr_value_out;
> $hdr_value_out = "";
> }
> -
> +
> //RFC 2047 specifies that any split header
> should
> //be seperated by a CRLF SPACE
> if ($output) {
> - $output ..= "\r\n ";
> + $output ..= "\r\n ";
> }
> $output .= $prefix . $part . $suffix;
> }
> @@ -1114,6 +1112,21 @@
> }
> }
>
> -
> + /**
> + * Get file's basename (locale independent)
> + *
> + * @param string Filename
> + *
> + * @return string Basename
> + * @access private
> + */
> + function _basename($filename)
> + {
> + // basename() is not unicode safe and locale dependent
> + if (stristr(PHP_OS, 'win') || stristr(PHP_OS, 'netware'))
> + return preg_replace('/^.*[\\\\\\/]/', '', $filename);
> + else
> + return preg_replace('/^.*[\/]/', '', $filename);
> + }
>
> } // End of class
>
Generally, looks good. I especially like that you added a test case for this.
Make sure to briefly review the PEAR coding standards -- they are
different from RoundCube. ;-) I can help/assist if you have questions.
+1 from my side, hope someone adds your karma and we can move forward
on this package.
Till