- DEBUG_u(fprintf(stderr,"%s %d %d %d\n",s,tainted,uid, euid));
- if (tainted && (!euid || euid != uid || egid != gid || taintanyway)) {
- if (!unsafe)
- fatal(f, s);
- else if (dowarn)
- warn(f, s);
+#if defined(HAS_SETEUID) && defined(DEBUGGING)
+ dVAR;
+
+ PERL_ARGS_ASSERT_TAINT_PROPER;
+
+# if Uid_t_size == 1
+ {
+ const UV uid = PL_uid;
+ const UV euid = PL_euid;
+
+ DEBUG_u(PerlIO_printf(Perl_debug_log,
+ "%s %d %"UVuf" %"UVuf"\n",
+ s, PL_tainted, uid, euid));
+ }
+# else
+ {
+ const IV uid = PL_uid;
+ const IV euid = PL_euid;
+
+ DEBUG_u(PerlIO_printf(Perl_debug_log,
+ "%s %d %"IVdf" %"IVdf"\n",
+ s, PL_tainted, uid, euid));
+ }
+# endif
+#endif
+
+ if (PL_tainted) {
+ const char *ug;
+
+ if (!f)
+ f = PL_no_security;
+ if (PL_euid != PL_uid)
+ ug = " while running setuid";
+ else if (PL_egid != PL_gid)
+ ug = " while running setgid";
+ else if (PL_taint_warn)
+ ug = " while running with -t switch";
+ else
+ ug = " while running with -T switch";
+ if (PL_unsafe || PL_taint_warn) {
+ Perl_ck_warner_d(aTHX_ packWARN(WARN_TAINT), f, s, ug);
+ }
+ else {
+ Perl_croak(aTHX_ f, s, ug);
+ }