- suppress warnings on unlink caused by race conditions

- correct line number on unknown tag error message
This commit is contained in:
Uwe.Tews
2009-11-23 22:31:22 +00:00
parent 963b13b0af
commit 4925a98949
7 changed files with 37 additions and 21 deletions

View File

@@ -1,4 +1,9 @@
11/23/2009 11/23/2009
- suppress warnings on unlink caused by race conditions
- correct line number on unknown tag error message
------- beta 5
11/23/2009
- fixed configfile parser for text starting with a numeric char - fixed configfile parser for text starting with a numeric char
- the default_template_handler_func may now return a filepath to a template source - the default_template_handler_func may now return a filepath to a template source

View File

@@ -130,10 +130,10 @@ class Smarty_Internal_CacheResource_File {
(isset($resource_name) && (string)$_file == $_dir . $_resource_part)) { (isset($resource_name) && (string)$_file == $_dir . $_resource_part)) {
if (isset($exp_time)) { if (isset($exp_time)) {
if (time() - @filemtime($_file) >= $exp_time) { if (time() - @filemtime($_file) >= $exp_time) {
$_count += unlink((string) $_file) ? 1 : 0; $_count += @unlink((string) $_file) ? 1 : 0;
} }
} else { } else {
$_count += unlink((string) $_file) ? 1 : 0; $_count += @unlink((string) $_file) ? 1 : 0;
} }
} }
} }

View File

@@ -37,13 +37,13 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
tags in the templates are replaces with PHP code, tags in the templates are replaces with PHP code,
then written to compiled files. */ then written to compiled files. */
// init the lexer/parser to compile the template // init the lexer/parser to compile the template
$lex = new $this->lexer_class($_content,$this->smarty); $this->lex = new $this->lexer_class($_content,$this->smarty);
$parser = new $this->parser_class($lex, $this); $this->parser = new $this->parser_class($this->lex, $this);
// $parser->PrintTrace(); // $this->parser->PrintTrace();
// get tokens from lexer and parse them // get tokens from lexer and parse them
while ($lex->yylex() && !$this->abort_and_recompile) { while ($this->lex->yylex() && !$this->abort_and_recompile) {
// echo "Line {$lex->line} Parsing {$parser->yyTokenName[$lex->token]} Token <pre>".htmlentities($lex->value)."</pre>"; // echo "Line {$this->lex->line} Parsing {$this->parser->yyTokenName[$this->lex->token]} Token <pre>".htmlentities($this->lex->value)."</pre>";
$parser->doParse($lex->token, $lex->value); $this->parser->doParse($this->lex->token, $this->lex->value);
} }
if ($this->abort_and_recompile) { if ($this->abort_and_recompile) {
@@ -51,7 +51,7 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
return false; return false;
} }
// finish parsing process // finish parsing process
$parser->doParse(0, 0); $this->parser->doParse(0, 0);
// check for unclosed tags // check for unclosed tags
if (count($this->_tag_stack) > 0) { if (count($this->_tag_stack) > 0) {
// get stacked info // get stacked info
@@ -61,7 +61,7 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
if (!$this->compile_error) { if (!$this->compile_error) {
// return compiled code // return compiled code
return str_replace(array("?>\n<?php","?><?php"), array('',''), $parser->retvalue); return str_replace(array("?>\n<?php","?><?php"), array('',''), $this->parser->retvalue);
} else { } else {
// compilation error // compilation error
return false; return false;

View File

@@ -149,7 +149,7 @@ class Smarty_Internal_TemplateCompilerBase {
} elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) { } elseif (in_array($methode, $this->smarty->registered_objects[$tag][3])) {
return $this->generateCode('object_block_function',$args, $tag, $methode); return $this->generateCode('object_block_function',$args, $tag, $methode);
} else { } else {
return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"'); return $this->trigger_template_error ('unallowed methode "' . $methode . '" in registered object "' . $tag . '"', $this->lex->taglineno);
} }
} }
// check if tag is registered or is Smarty plugin // check if tag is registered or is Smarty plugin
@@ -176,7 +176,7 @@ class Smarty_Internal_TemplateCompilerBase {
if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) { if (in_array($methode, $this->smarty->registered_objects[$base_tag][3])) {
return $this->generateCode('object_block_function', $args, $tag, $methode); return $this->generateCode('object_block_function', $args, $tag, $methode);
} else { } else {
return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"'); return $this->trigger_template_error ('unallowed closing tag methode "' . $methode . '" in registered object "' . $base_tag . '"', $this->lex->taglineno);
} }
} }
// plugin ? // plugin ?
@@ -184,7 +184,7 @@ class Smarty_Internal_TemplateCompilerBase {
return $this->generateCode('block_plugin',$args, $tag); return $this->generateCode('block_plugin',$args, $tag);
} }
} }
$this->trigger_template_error ("unknown tag \"" . $tag . "\""); $this->trigger_template_error ("unknown tag \"" . $tag . "\"", $this->lex->taglineno);
} }
} }
@@ -231,14 +231,11 @@ class Smarty_Internal_TemplateCompilerBase {
* @todo output exact position of parse error in source line * @todo output exact position of parse error in source line
* @param $args string individual error message or null * @param $args string individual error message or null
*/ */
public function trigger_template_error($args = null) public function trigger_template_error($args = null, $line= null)
{ {
$this->lex = Smarty_Internal_Templatelexer::instance();
$this->parser = Smarty_Internal_Templateparser::instance();
// get template source line which has error // get template source line which has error
if (!isset($line)) {
$line = $this->lex->line; $line = $this->lex->line;
if (isset($args)) {
// $line--;
} }
$match = preg_split("/\n/", $this->lex->data); $match = preg_split("/\n/", $this->lex->data);
$error_text = 'Syntax Error in template "' . $this->template->getTemplateFilepath() . '" on line ' . $line . ' "' . $match[$line-1] . '" '; $error_text = 'Syntax Error in template "' . $this->template->getTemplateFilepath() . '" on line ' . $line . ' "' . $match[$line-1] . '" ';

View File

@@ -18,6 +18,7 @@ class Smarty_Internal_Templatelexer
public $value; public $value;
public $node; public $node;
public $line; public $line;
public $taglineno;
public $state = 1; public $state = 1;
public $smarty_token_names = array ( // Text for parser error messages public $smarty_token_names = array ( // Text for parser error messages
'IDENTITY' => '===', 'IDENTITY' => '===',
@@ -296,6 +297,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r1_10($yy_subpatterns) function yy_r1_10($yy_subpatterns)
@@ -306,6 +308,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r1_11($yy_subpatterns) function yy_r1_11($yy_subpatterns)
@@ -313,12 +316,14 @@ class Smarty_Internal_Templatelexer
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r1_12($yy_subpatterns) function yy_r1_12($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r1_13($yy_subpatterns) function yy_r1_13($yy_subpatterns)
{ {
@@ -604,6 +609,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r2_8($yy_subpatterns) function yy_r2_8($yy_subpatterns)
@@ -614,6 +620,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r2_9($yy_subpatterns) function yy_r2_9($yy_subpatterns)
@@ -631,12 +638,14 @@ class Smarty_Internal_Templatelexer
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r2_11($yy_subpatterns) function yy_r2_11($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r2_12($yy_subpatterns) function yy_r2_12($yy_subpatterns)
{ {
@@ -1328,6 +1337,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r5_2($yy_subpatterns) function yy_r5_2($yy_subpatterns)
@@ -1338,6 +1348,7 @@ class Smarty_Internal_Templatelexer
} else { } else {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
} }
function yy_r5_3($yy_subpatterns) function yy_r5_3($yy_subpatterns)
@@ -1345,12 +1356,14 @@ class Smarty_Internal_Templatelexer
$this->token = Smarty_Internal_Templateparser::TP_LDELSLASH; $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r5_4($yy_subpatterns) function yy_r5_4($yy_subpatterns)
{ {
$this->token = Smarty_Internal_Templateparser::TP_LDEL; $this->token = Smarty_Internal_Templateparser::TP_LDEL;
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r5_5($yy_subpatterns) function yy_r5_5($yy_subpatterns)
{ {
@@ -1364,6 +1377,7 @@ class Smarty_Internal_Templatelexer
$this->token = Smarty_Internal_Templateparser::TP_BACKTICK; $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
$this->value = substr($this->value,0,-1); $this->value = substr($this->value,0,-1);
$this->yypushstate(self::SMARTY); $this->yypushstate(self::SMARTY);
$this->taglineno = $this->line;
} }
function yy_r5_7($yy_subpatterns) function yy_r5_7($yy_subpatterns)
{ {

View File

@@ -36,7 +36,7 @@ class Smarty_Internal_Write_File {
} }
// remove original file // remove original file
if (file_exists($_filepath)) if (file_exists($_filepath))
unlink($_filepath); @unlink($_filepath);
// rename tmp file // rename tmp file
rename($_tmp_file, $_filepath); rename($_tmp_file, $_filepath);
// set file permissions // set file permissions

View File

@@ -51,10 +51,10 @@ function Smarty_Method_Clear_Compiled_Tpl($smarty, $resource_name = null, $comp
substr_compare((string)$_file, $_resource_part_2, - strlen($_resource_part_2), strlen($_resource_part_2)) == 0)) { substr_compare((string)$_file, $_resource_part_2, - strlen($_resource_part_2), strlen($_resource_part_2)) == 0)) {
if (isset($exp_time)) { if (isset($exp_time)) {
if (time() - @filemtime($_file) >= $exp_time) { if (time() - @filemtime($_file) >= $exp_time) {
$_count += unlink((string) $_file) ? 1 : 0; $_count += @unlink((string) $_file) ? 1 : 0;
} }
} else { } else {
$_count += unlink((string) $_file) ? 1 : 0; $_count += @unlink((string) $_file) ? 1 : 0;
} }
} }
} }