alecpl
2011-02-16 207cc0b9b3cfdfb29e4f02e83014320fd12eeb68
plugins/managesieve/lib/Net/Sieve.php
@@ -763,7 +763,7 @@
            return $res;
        }
        return preg_replace('/{[0-9]+}\r\n/', '', $res);
        return preg_replace('/^{[0-9]+}\r\n/', '', $res);
    }
    /**
@@ -981,6 +981,28 @@
    }
    /**
     * Receives x bytes from the server.
     *
     * @param int $length  Number of bytes to read
     *
     * @return string  The server response.
     */
    function _recvBytes($length)
    {
        $response = '';
        $response_length = 0;
        while ($response_length < $length) {
            $response .= $this->_sock->read($length - $response_length);
            $response_length = $this->_getLineLength($response);
        }
        $this->_debug("S: " . rtrim($response));
        return $response;
    }
    /**
     * Send a command and retrieves a response from the server.
     *
     * @param string $cmd   The command to send.
@@ -1013,11 +1035,11 @@
                if ('NO' == substr($uc_line, 0, 2)) {
                    // Check for string literal error message.
                    if (preg_match('/^no {([0-9]+)\+?}/i', $line, $matches)) {
                        $line .= str_replace(
                            "\r\n", ' ', $this->_sock->read($matches[1] + 2)
                        );
                        $this->_debug("S: $line");
                    if (preg_match('/{([0-9]+)}$/i', $line, $matches)) {
                        $line = substr($line, 0, -(strlen($matches[1])+2))
                            . str_replace(
                                "\r\n", ' ', $this->_recvBytes($matches[1] + 2)
                            );
                    }
                    return PEAR::raiseError(trim($response . substr($line, 2)), 3);
                }
@@ -1052,16 +1074,9 @@
                    return PEAR::raiseError(trim($response . $line), 6);
                }
                if (preg_match('/^{([0-9]+)\+?}/i', $line, $matches)) {
                    // Matches String Responses.
                    $str_size = $matches[1] + 2;
                    $line = '';
                    $line_length = 0;
                    while ($line_length < $str_size) {
                        $line .= $this->_sock->read($str_size - $line_length);
                        $line_length = $this->_getLineLength($line);
                    }
                    $this->_debug("S: $line");
                if (preg_match('/^{([0-9]+)}/i', $line, $matches)) {
                    // Matches literal string responses.
                    $line = $this->_recvBytes($matches[1] + 2);
                    if (!$auth) {
                        // Receive the pending OK only if we aren't
@@ -1146,7 +1161,13 @@
        // The server should be sending a CAPABILITY response after
        // negotiating TLS. Read it, and ignore if it doesn't.
        $this->_doCmd();
        // Doesn't work with older timsieved versions
        $regexp = '/^CYRUS TIMSIEVED V([0-9.]+)/';
        if (!preg_match($regexp, $this->_capability['implementation'], $matches)
            || version_compare($matches[1], '2.3.10', '>=')
        ) {
            $this->_doCmd();
        }
        // RFC says we need to query the server capabilities again now that we
        // are under encryption.