Don't escape single quotes in alert templates so that we can compare strings in if statements

This commit is contained in:
Eldon Koyle
2016-03-03 11:02:17 -07:00
parent b34ee3932f
commit 124afc2054

View File

@ -359,6 +359,18 @@ function ExtTransports($obj) {
}//end ExtTransports()
/**
* Escape certain characters in template string
* @param string $tpl Template
* @return string
*/
function TplEscape($tpl) {
// theoretically like addslashes(), but don't escape single quote (') and do escape $
// FIXME: is there still a way to break out of the double-quoted string, maybe with a unicode char?
return preg_replace('(["\\\\$\\0])','\\0',$tpl);
}
/**
* Format Alert
* @param array $obj Alert-Array
@ -366,7 +378,7 @@ function ExtTransports($obj) {
*/
function FormatAlertTpl($obj) {
$tpl = $obj["template"];
$msg = '$ret .= "'.str_replace(array('{else}', '{/if}', '{/foreach}'), array('"; } else { $ret .= "', '"; } $ret .= "', '"; } $ret .= "'), addslashes($tpl)).'";';
$msg = '$ret .= "'.str_replace(array('{else}', '{/if}', '{/foreach}'), array('"; } else { $ret .= "', '"; } $ret .= "', '"; } $ret .= "'), TplEscape($tpl)).'";';
$parsed = $msg;
$s = strlen($msg);
$x = $pos = -1;