This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Add C define to remove taint support from perl origin/smueller/no_taint3
authorSteffen Mueller <smueller@cpan.org>
Tue, 9 Oct 2012 09:19:37 +0000 (11:19 +0200)
committerSteffen Mueller <smueller@cpan.org>
Mon, 5 Nov 2012 07:01:43 +0000 (08:01 +0100)
commit284167a54e2da949b77d1e736a8b0a0d21210803
tree6abdbd2e28d67b392a2137f37554b758ecac0900
parente88567f2acf38fe5ed90a88569b808e82cd3eca1
Add C define to remove taint support from perl

By defining NO_TAINT_SUPPORT, all the various checks that perl does for
tainting become no-ops. It's not an entirely complete change: it doesn't
attempt to remove the taint-related interpreter variables, but instead
virtually eliminates access to it.

Why, you ask? Because it appears to speed up perl's run-time
significantly by avoiding various "are we running under taint" checks
and the like.

This change is not in a state to go into blead yet. The actual way I
implemented it might raise some (valid) objections. Basically, I
replaced all uses of the global taint variables (but not PL_taint_warn!)
with an extra layer of get/set macros (TAINT_get/TAINTING_get).
Furthermore, the change is not complete:

- PL_taint_warn would likely deserve the same treatment.
- Obviously, tests fail. We have tests for -t/-T
- Right now, I added a Perl warn() on startup when -t/-T are detected
  but the perl was not compiled support it. It might be argued that it
  should be silently ignored! Needs some thinking.
- Code quality concerns - needs review.
- Configure support required.
- Needs thinking: How does this tie in with CPAN XS modules that use
  PL_taint and friends? It's easy to backport the new macros via PPPort,
  but that doesn't magically change all code out there. Might be
  harmless, though, because whenever you're running under
  NO_TAINT_SUPPORT, any check of PL_taint/etc is going to come up false.
  Thus, the only CPAN code that SHOULD be adversely affected is code
  that changes taint state.
31 files changed:
dist/Cwd/t/taint.t
dist/IO/t/io_taint.t
dist/Locale-Maketext/t/09_compile.t
doio.c
doop.c
dump.c
ext/Devel-Peek/t/Peek.t
ext/File-Glob/t/taint.t
ext/POSIX/t/taint.t
hv.c
lib/File/Basename.t
lib/File/Find/t/taint.t
mg.c
op.c
os2/os2.c
pad.c
perl.c
perl.h
perlio.c
pp_ctl.c
pp_hot.c
pp_sys.c
regcomp.c
regexp.h
scope.c
sv.c
sv.h
taint.c
utf8.c
util.c
vms/vms.c