]>
iEval git - acme-evil.git/blob - lib/evil.pm
10 my $INTERMEDIATE = __PACKAGE__
.'/intermediate';
11 my $LAX = __PACKAGE__
.'/lax';
19 croak
"Cannot load evil module when \"no evil ':strict'\" is in effect" if %wants_strict;
21 my $hinthash = (caller 0)[10] || {};
22 croak
"Current module requested no evilness" if $hinthash->{$LAX};
24 $hinthash = (caller 3)[10] || {};
25 croak
"Cannot load evil module when parent requested \"no evil ':lax'\"" if $hinthash->{$LAX};
29 while (@caller = caller $level) {
30 $hinthash = $caller[10] || {};
31 croak
"Cannot load evil module when ancestor requested \"no evil ':intermediate'\""
32 if $hinthash->{$INTERMEDIATE};
36 $tainted{caller()} = 1;
40 my $strict_arg = grep /^:strict$/i, @_;
41 my $intermediate_arg = grep /^:intermediate$/i, @_;
42 my $lax_arg = grep /^:lax$/i, @_;
43 my $disable_arg = grep /^:disable$/i, @_;
45 if (!$disable_arg && $tainted{caller()}) { # caller is evil
46 croak
'Current module is evil'
50 $wants_strict{caller()} = 1;
51 croak
"Evil module already loaded. Cannot enforce \"no evil ':strict'\"" if %tainted
54 } elsif ($disable_arg) {
55 delete $wants_strict{caller()};
57 delete $^H
{$INTERMEDIATE};
58 } else { # $intermediate_arg or no arg
59 $^H
{$INTERMEDIATE} = $^H
{$LAX} = 1
70 evil - RFC 3514 (evil bit) implementation for Perl modules
95 use C; # does not die, as C is not evil
101 # does not die, as modules loaded before the pragma are ignored
105 L<RFC3514|https://www.ietf.org/rfc/rfc3514.txt> introduces a new flag
106 called the "evil bit" in all IP packets. The intention is to simplify
107 the work of firewalls. Software that sends IP packets with malicious
108 intent must set the evil bit to true, and firewalls can simply drop
111 The evil pragma is a Perl implementation of the same concept. With
112 this pragma malicious modules can declare their evil intent while
113 critical modules can request that they will only use / run alongside
116 The pragma can be used in the following ways:
122 Marks the current package as evil. All malicious modules MUST use this
123 directive to ensure the full functionality of this pragma.
125 =item no B<evil> ':strict';
127 The calling module function properly if malignant code is loaded
128 anywhere in the program. Throws an exception if an evil module is
129 loaded, whether at the moment of calling this pragma or in the future.
131 =item no B<evil> ':disable';
133 Removes the effect of any previous C<no B<evil> ':something'> used in
134 this module, thus stating the module does not care about evil code.
136 =item no B<evil> ':intermediate'
138 The calling module cannot function properly if it is using evil code,
139 whether directly or indirectly. Throws an exception if an evil module
140 is subsequently loaded by the calling module or by one of the children
141 modules (or by one of their children modules, etc). Also throws an
142 exception if the current module is evil.
144 =item no B<evil> ':lax';
146 The calling module cannot function properly if it is using evil code
147 direcly. Throws an exception if the calling module subsequently loads
148 an evil module, or if the current module is evil.
152 Synonym for C<no evil ':intermediate'>.
158 When using intermediate and lax modes, any evil modules loaded before
159 the pragma is enabled are ignored. This is by design, to allow
160 temporarily disabling the pragma. An example:
168 use Evil::Module; # does not die
171 use Some::More::Modules;
174 Correct functioning of this pragma depends critically on the evil bit
175 being set properly. If a faulty evil module fails to C<use evil;>, the
176 pragma will not function properly.
180 Marius Gavrilescu, E<lt>marius@ieval.roE<gt>
182 =head1 COPYRIGHT AND LICENSE
184 Copyright (C) 2016 by Marius Gavrilescu
186 This library is free software; you can redistribute it and/or modify
187 it under the same terms as Perl itself, either Perl version 5.22.2 or,
188 at your option, any later version of Perl 5 you may have available.
This page took 0.06429 seconds and 4 git commands to generate.