HAS_ITHREADS => $Config{useithreads} ? 1 : 0,
+ TAINT_MODE => 0 + ${^TAINT}, # tri-state: 0, 1, -1
+
UNSTABLE_DOLLARAT => ( PERL_VERSION < 5.013002 ) ? 1 : 0,
( map
use Carp 'croak';
use Storable 'nfreeze';
use Scalar::Util qw(weaken blessed reftype refaddr);
-use Sub::Quote qw(qsub);
use Sub::Name ();
use attributes ();
+# Usually versions are not specified anywhere aside the Makefile.PL
+# (writing them out in-code is extremely obnoxious)
+# However without a recent enough Moo the quote_sub override fails
+# in very puzzling and hard to detect ways: so add a version check
+# just this once
+use Sub::Quote qw(qsub);
+BEGIN { Sub::Quote->VERSION('2.002002') }
+
# Already correctly prototyped: perlbrew exec perl -MStorable -e 'warn prototype \&Storable::dclone'
BEGIN { *deep_clone = \&Storable::dclone }
croak "Expecting a class name either as the sole argument or a 'class' option"
if not defined $class or $class !~ $module_name_rx;
+ croak(
+ "The supplied 'class' argument is tainted: this is *extremely* "
+ . 'dangerous, fix your code ASAP!!! ( for more details read through '
+ . 'https://is.gd/perl_mro_taint_wtf )'
+ ) if (
+ DBIx::Class::_ENV_::TAINT_MODE
+ and
+ Scalar::Util::tainted($class)
+ );
+
$requested_mro ||= mro::get_mro($class);
# mro::set_mro() does not bump pkg_gen - WHAT THE FUCK?!
if (
! DBIx::Class::_ENV_::OLD_MRO
and
- ${^TAINT}
+ DBIx::Class::_ENV_::TAINT_MODE
) {
$slot->{cumulative_gen} = 0;