* This code provides various string manipulation functions that are
* used by the rest of the SquirrelMail code.
*
- * @copyright 1999-2010 The SquirrelMail Project Team
+ * @copyright 1999-2011 The SquirrelMail Project Team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
* @version $Id$
* @package squirrelmail
* @since 1.0.3
*/
function quoteimap($str) {
- return preg_replace("/([\"\\\\])/", "\\\\$1", $str);
+ return str_replace(array('\\', '"'), array('\\\\', '\\"'), $str);
}
/**
if ($html_entities_as_chars)
{
- $entity_pos = -1;
- while (($entity_pos = sq_strpos($string, '&', $entity_pos + 1)) !== FALSE
+ // $loop_count is needed to prevent an endless loop
+ // which is caused by buggy mbstring versions that
+ // return 0 (zero) instead of FALSE in some rare
+ // cases. Thanks, PHP.
+ // see: http://bugs.php.net/bug.php?id=52731
+ // also: tracker $3053349
+ //
+ $loop_count = 0;
+ $entity_pos = $entity_end_pos = -1;
+ while ($entity_end_pos + 1 < $actual_strlen
+ && ($entity_pos = sq_strpos($string, '&', $entity_end_pos + 1)) !== FALSE
&& ($entity_end_pos = sq_strpos($string, ';', $entity_pos)) !== FALSE
- && $entity_pos <= $adjusted_max_chars)
+ && $entity_pos <= $adjusted_max_chars
+ && $loop_count++ < $max_chars)
{
$adjusted_max_chars += $entity_end_pos - $entity_pos;
}