Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister

problem using File::Find and taint

by jonnyfolk (Vicar)
on Dec 31, 2007 at 04:46 UTC ( #659703=perlquestion: print w/replies, xml ) Need Help??
jonnyfolk has asked for the wisdom of the Perl Monks concerning the following question:

I've written the following script to help me find relevant scripts in my rather burgeoning cgi-bin directory. I would like to use the -T switch to run this but I'm getting a software error. How can I get round this?

#!/usr/bin/perl -wT use strict; use CGI::Carp qw(fatalsToBrowser warningsToBrowser); use CGI ':standard'; use File::Find; print "Content-type: text/html\n\n"; my $dir = '/myroot/public_html/cgi-bin'; my $word = param('word'); $word =~ /(^\w+|\s+$)/; my $valid = $1; unless ($valid) { print 'no word'; exit; } find(\&find_word, $dir); sub find_word { if (($File::Find::name =~ /\.pl/) or ($File::Find::name =~ /\.cgi/)) + { open FH, '<', $File::Find::name or die "Can't open $File::Find::na +me: $!"; while (my $line = <FH>) { chomp; if ($line =~ /$valid/) { print "$File::Find::name == $line\n\n" } } } }
Software error: Insecure dependency in chdir while running with -T switch at /usr/lib/ +perl5/5.8.8/File/ line 844, <FH> line 43175.

Replies are listed 'Best First'.
Re: problem using File::Find and taint
by chromatic (Archbishop) on Dec 31, 2007 at 04:57 UTC

    The File::Find documentation suggests that you can pass options to find() to provide an untainting pattern for directory names. You may be able to get away with:

    find({ untaint => 1, wanted => \&find_word }, $dir);
      That's done the trick, many thanks
Re: problem using File::Find and taint
by GrandFather (Sage) on Dec 31, 2007 at 04:58 UTC

    You have to set the 'untaint' option:

    find ({untaint => 1, wanted => \&find_word}, $dir);

    Perl is environmentally friendly - it saves trees
Re: problem using File::Find and taint
by Anonymous Monk on Dec 31, 2007 at 13:35 UTC

    You can also use no_chdir => 1 as an option. This makes the problem go away, though your &wanted function may need to know about this.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://659703]
Approved by GrandFather
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (4)
As of 2017-02-26 13:40 GMT
Find Nodes?
    Voting Booth?
    Before electricity was invented, what was the Electric Eel called?

    Results (373 votes). Check out past polls.