Am Donnerstag, 19. Mai 2005 22.11 schrieb Matthew Sacks:
> Greetings,
> This is the sort of little question that drives me nuts.
> I am reading about tainting/taintedness etc. in the Camel book.  Look at p.
> 561 for an example of a perl subroutine that tests data to see if it is
> tainted, returning true or false.  It contains this line (writing from
> memory):
>
> eval { eval "#  $nada"}};
>
> if $nada is tainted, that code raises an exception.  The Camel books does
> explain why.

My view (no camel book at hand): 

The inner eval detects the taintedness of $nada (at runtime because of the 
eval STRING which is always evaluated at runtime).

The outer eval catches the runtime error raised by the inner eval in case of 
tainted $nada, avoids an automatic die() and provides $@ to detect if the 
inner eval die()d, meaning $nada was tainted.


sub tainted {
 my $nada=shift;

 eval { # this eval sets [EMAIL PROTECTED] 
  eval "#  $nada"} # if this eval die()s
 };

 return $@ ? 1 : 0;
}

> OK. Now my  question is,   what is the significance of the "# " character? 
>  Is the "#" just one char in the string, or is it evaluated or interpolated
> somehow?  If so, where in the Camel book is this explained.... Best Wishes,


The comment hinders $data from being executed, but not from being compiled at 
runtime.

Imagine the above tainted() without the '#' in the evaled string, and $data 
contains 'system ("rm -rf;")':

1. $nada would be executed
2. the quotes around the evaled string would not be necessary



I hope this explanation is half way correct - if not, hope for one of the list 
gurus with their extraordinary didactical capabilities :-)
or
perldoc -f eval

joe

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to