From ccad13abe5a4d9d786d05f92cfab9b9d63685cd1 Mon Sep 17 00:00:00 2001 From: teepe Date: Thu, 8 Nov 2001 23:04:56 +0000 Subject: [PATCH] added file for sanitizing plugins w.r.t. the foo_once issue git-svn-id: https://svn.code.sf.net/p/squirrelmail/code/trunk/squirrelmail@1709 7612ce4b-ef26-0410-bec9-ea0150e637f0 --- config/ri_once.pl | 235 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 235 insertions(+) create mode 100755 config/ri_once.pl diff --git a/config/ri_once.pl b/config/ri_once.pl new file mode 100755 index 00000000..3c77f2ae --- /dev/null +++ b/config/ri_once.pl @@ -0,0 +1,235 @@ +#!/usr/bin/perl +# ri_once.pl +# Wouter Teepe (wouter@teepe.com) +# +# A simple configure script to fix the ri_once issue +# +# $Id$ +############################################################ + +$debug = 0; + +# sets the xterm color (only used when $debug=1) +sub color { + $t = $_[0]; + if ($t == 0) { + print "\e[0m"; + } else {if ($t == 1) { + print "\e[0m\e[31;43m"; + } else {if ($t == 2) { + print "\e[0m\e[30;42m"; + } else {if ($t == 3) { + print "\e[0m\e[33;41m"; + }}}} +} + +# prints arg1 with color arg2 (only used when $debug=1) +sub myprintdebug { + $line = $_[0]; + $color = $_[1]; + while ($line ne "") { + $pos = index($line, "\n"); + if ($pos == -1) { + &color($color); + print $line; + $line = ""; + } else { + &color($color); + $str = substr($line, 0, $pos); + print $str; + print "\e[30;40m\n"; + $line = substr($line, $pos+1); + } + } + +} + +# print arg1 to term or $out +sub myprint { + if ($debug) { + &myprintdebug; + } else { + $out .= $_[0]; + } +} + +# parse php code fore include's and require's +sub code { + $lastbyte = 0; + while ($phpcode ne "") { + $inc = index($phpcode, 'include'); + $req = index($phpcode, 'require'); + if (($req == -1) or (($inc != -1) and ($inc < $req))) { + $index = $inc; + } else { + $index = $req; + } + if ($index != -1) { + &myprint(substr($phpcode, 0, $index), 1); + if ($index > 0) { + $r = ord(substr($phpcode, $index-1, 1)); + } else { + $r = $lastbyte; + } + $falsematch = 0; + if ((($r >= 125) and ($r <= 255)) or ($r == ord("_")) or + (($r >= ord("A")) and ($r <= ord("Z"))) or + (($r >= ord("a")) and ($r <= ord("z"))) or + (($r >= ord("1")) and ($r <= ord("9")))) { + $falsematch = 1; + } + if (!$falsematch) { + $o = index($phpcode, '(', $index); + if ($o == -1) { + $p = substr($phpcode, $index+7); + } else { + $p = substr($phpcode, $index+7, $o-$index-7); + } + if (!($p =~ /^\s*$/)) { + $falsematch = 1; + } + } + if (!$falsematch) { + $mod++; + &myprint('/* \'_once\' Added by ri_once */ ', 3); + } + &myprint(substr($phpcode, $index, 7), 1); + if (!$falsematch) { + &myprint('_once', 3); + } + $lastbyte = ord('e'); + $phpcode = substr($phpcode, $index+7); + } else { + &myprint($phpcode, 1); + $phpcode = ''; + } + } +} + +# parse php block for comments and strings +sub php { + while ($htmlcomment ne "") { + $len = length($htmlcomment); + $doublequote = index($htmlcomment, '"'); + $singlequote = index($htmlcomment, "'"); + $pound = index($htmlcomment, '#'); + $slashslash = index($htmlcomment, '//'); + $slashstar = index($htmlcomment, '/*'); + if ($doublequote == -1) { $doublequote = $len; } + if ($singlequote == -1) { $singlequote = $len; } + if ($pound == -1) { $pound = $len; } + if ($slashslash == -1) { $slashslash = $len; } + if ($slashstar == -1) { $slashstar = $len; } + + $pos = $doublequote; $end = '"'; $sl = 1; $el = 1; + if ($pos > $singlequote) { $pos = $singlequote; $end = "'"; } + if ($pos > $pound) { $pos = $pound; $end = "\n"; } + if ($pos > $slashslash) { $pos = $slashslash; $end = "\n"; $sl = 2; } + if ($pos > $slashstar) { $pos = $slashstar; $end = '*/'; $sl = 2; $el = 2; } + + if ($pos < $len) { + $phpcode = substr($htmlcomment, 0, $pos); + $rest = substr($htmlcomment, $pos); + $eoc = index($rest, $end, $sl); + if (($end = '"') or ($end = "'")) { + while (($eoc > 0) and (substr($rest, $eoc-1, 1) eq '\\')) { + $eoc = index($rest, $end, $eoc+1); + } + } + if ($eoc == -1) { $eoc = length($rest); } + $phpcomment = substr($rest, 0, $eoc+$el); + $htmlcomment = substr($rest, $eoc+$el); + &code; + &myprint($phpcomment, 2); + } else { + $phpcode = $htmlcomment; + &code; + $htmlcomment = ''; + } + } +} + +# parse html file for php blocks +sub html { + while ($text ne '') { + $index = index($text, ''); + if ($index == -1) { $index = length($text); } + $htmlcomment = substr($text, 0, $index); + $text = substr($text, $index); + $type = substr($htmlcomment, 0, 3); + if (uc($type) eq "PHP") { + &myprint($type, 0); + $htmlcomment = substr($htmlcomment, 3); + } else { if (substr($htmlcomment, 0, 1) eq '=') { + $mod++; + &myprint('php /* \'=\' Modified to \'php blah echo\'by ri_once */ echo ', 3); + $htmlcomment = substr($htmlcomment, 1); + } else { + $mod++; + &myprint('php /* \'php\' Added by ri_once */', 3); + }} + &php; + } else { + &myprint($text, 0); + $text =''; + } + } +} + +# process a file +sub dofile { + $file = $_[0]; + + open (FILE, '<'.$file); + $text = ''; + $htmlcomment = ''; + $phpcode = ''; + $out = ''; + $mod = 0; + while ($line = ) { + $text .= $line; + } + close (FILE); + + &html; + if ($debug) { + &color(0); + print "\n"; + } else { + if ($mod) { + $out = "\n" . $out; +# $mode = (stat($file))[2]; + rename($file, $file.'.before_ri_once'); + open (FILE, '>'.$file); + print FILE $out; + close(FILE); +# chmod($stats[2], $file); + } + } +} + +# process a directory recursively +sub dodir { + $dirname = $_[0]; + $dirname =~ s/\/$//; + opendir(DIR, $dirname) or die "can't opendir $dirname: $!"; + while (defined($file = readdir(DIR))) { + next if $file =~ /^\.\.?$/; + $full = $dirname.'/'.$file; + if (-d $full) { + &dodir($full); + } else { if ($file =~ /.*\.php$/) { + &dofile($full); + }} + } + closedir(DIR); +} + +#&dofile($ARGV[0]); +&dodir($ARGV[0]); + -- 2.25.1