Re: Mail_Mime patches

From: 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

« previous php.pear.dev (#53112) next »