2
0
Quellcode durchsuchen

[ZF-9505]Zend_Mail_Protocol_Abstract - truncates server response when SMTP server responds with a message containing spaces

git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@21634 44c647ce-9c0f-0410-b52a-842ac1e357ba
yoshida@zend.co.jp vor 16 Jahren
Ursprung
Commit
fe2cbe5103
1 geänderte Dateien mit 7 neuen und 5 gelöschten Zeilen
  1. 7 5
      library/Zend/Mail/Protocol/Abstract.php

+ 7 - 5
library/Zend/Mail/Protocol/Abstract.php

@@ -111,6 +111,7 @@ abstract class Zend_Mail_Protocol_Abstract
     /**
      * String template for parsing server responses using sscanf (default: 3 digit code and response string)
      * @var resource
+     * @deprecated Since 1.10.3
      */
     protected $_template = '%d%s';
 
@@ -378,8 +379,9 @@ abstract class Zend_Mail_Protocol_Abstract
     protected function _expect($code, $timeout = null)
     {
         $this->_response = array();
-        $cmd = '';
-        $msg = '';
+        $cmd  = '';
+        $more = '';
+        $msg  = '';
         $errMsg = '';
 
         if (!is_array($code)) {
@@ -388,15 +390,15 @@ abstract class Zend_Mail_Protocol_Abstract
 
         do {
             $this->_response[] = $result = $this->_receive($timeout);
-            sscanf($result, $this->_template, $cmd, $msg);
+            list($cmd, $more, $msg) = preg_split('/([\s-]+)/', $result, 2, PREG_SPLIT_DELIM_CAPTURE);
 
             if ($errMsg !== '') {
-                $errMsg .= $msg;
+                $errMsg .= ' ' . $msg;
             } elseif ($cmd === null || !in_array($cmd, $code)) {
                 $errMsg =  $msg;
             }
 
-        } while (strpos($msg, '-') === 0); // The '-' message prefix indicates an information string instead of a response string.
+        } while (strpos($more, '-') === 0); // The '-' message prefix indicates an information string instead of a response string.
 
         if ($errMsg !== '') {
             /**