/usr/share/php/Horde/Imap/Client/Data/Format/String.php is in php-horde-imap-client 2.29.12-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 | <?php
/**
* Copyright 2012-2016 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Horde
* @copyright 2012-2016 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Imap_Client
*/
/**
* Object representation of an IMAP string (RFC 3501 [4.3]).
*
* @author Michael Slusarz <slusarz@horde.org>
* @category Horde
* @copyright 2012-2016 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Imap_Client
*/
class Horde_Imap_Client_Data_Format_String
extends Horde_Imap_Client_Data_Format
{
/**
* String filter parameters.
*
* @var string
*/
protected $_filter;
/**
* @param array $opts Additional options:
* - eol: (boolean) If true, normalize EOLs in input. @since 2.2.0
* - skipscan: (boolean) If true, don't scan input for
* binary/literal/quoted data. @since 2.2.0
*
* @throws Horde_Imap_Client_Data_Format_Exception
*/
public function __construct($data, array $opts = array())
{
/* String data is stored in a stream. */
$this->_data = new Horde_Stream_Temp();
if (empty($opts['skipscan'])) {
$this->_filter = $this->_filterParams();
stream_filter_register('horde_imap_client_string', 'Horde_Imap_Client_Data_Format_Filter_String');
$res = stream_filter_append($this->_data->stream, 'horde_imap_client_string', STREAM_FILTER_WRITE, $this->_filter);
} else {
$res = null;
}
if (empty($opts['eol'])) {
$res2 = null;
} else {
stream_filter_register('horde_eol', 'Horde_Stream_Filter_Eol');
$res2 = stream_filter_append($this->_data->stream, 'horde_eol', STREAM_FILTER_WRITE);
}
$this->_data->add($data);
if (!is_null($res)) {
stream_filter_remove($res);
}
if (!is_null($res2)) {
stream_filter_remove($res2);
}
if (isset($this->_filter) &&
$this->_filter->nonascii &&
!($this instanceof Horde_Imap_Client_Data_Format_String_Support_Nonascii)) {
throw new Horde_Imap_Client_Data_Format_Exception(
'String contains non-ASCII characters.'
);
}
}
/**
* Return the base string filter parameters.
*
* @return object Filter parameters.
*/
protected function _filterParams()
{
return new stdClass;
}
/**
*/
public function __toString()
{
return $this->_data->getString(0);
}
/**
*/
public function escape()
{
if ($this->literal()) {
throw new Horde_Imap_Client_Data_Format_Exception('String requires literal to output.');
}
return $this->quoted()
? stream_get_contents($this->escapeStream())
: $this->_data->getString(0);
}
/**
* Return the escaped string as a stream.
*
* @return resource The IMAP escaped stream.
*/
public function escapeStream()
{
if ($this->literal()) {
throw new Horde_Imap_Client_Data_Format_Exception('String requires literal to output.');
}
rewind($this->_data->stream);
$stream = new Horde_Stream_Temp();
$stream->add($this->_data, true);
stream_filter_register('horde_imap_client_string_quote', 'Horde_Imap_Client_Data_Format_Filter_Quote');
stream_filter_append($stream->stream, 'horde_imap_client_string_quote', STREAM_FILTER_READ);
return $stream->stream;
}
/**
* Does this data item require quoted string output?
*
* @return boolean True if quoted output is required.
*/
public function quoted()
{
/* IMAP strings MUST be quoted if they are not a literal. */
return (!isset($this->_filter) || !$this->_filter->literal);
}
/**
* Force item to be output quoted.
*/
public function forceQuoted()
{
$this->_filter = $this->_filterParams();
$this->_filter->binary = false;
$this->_filter->literal = false;
$this->_filter->quoted = true;
}
/**
* Does this data item require literal string output?
*
* @return boolean True if literal output is required.
*/
public function literal()
{
return (isset($this->_filter) && $this->_filter->literal);
}
/**
* Force item to be output as a literal.
*/
public function forceLiteral()
{
$this->_filter = $this->_filterParams();
// Keep binary status, if set
$this->_filter->literal = true;
$this->_filter->quoted = false;
}
/**
* If literal output, is the data binary?
*
* @return boolean True if the literal output is binary.
*/
public function binary()
{
return (isset($this->_filter) && !empty($this->_filter->binary));
}
/**
* Force item to be output as a binary literal.
*/
public function forceBinary()
{
$this->_filter = $this->_filterParams();
$this->_filter->binary = true;
$this->_filter->literal = true;
$this->_filter->quoted = false;
}
/**
* Return the length of the data.
*
* @since 2.2.0
*
* @return integer Data length.
*/
public function length()
{
return $this->_data->length();
}
/**
* Return the contents of the string as a stream object.
*
* @since 2.3.0
*
* @return Horde_Stream The stream object.
*/
public function getStream()
{
return $this->_data;
}
}
|