Change 19979 by [EMAIL PROTECTED] on 2003/07/04 08:33:32

        Remove PL_earlytaint since the hash seed code
        can be delayed until perl_parse().

Affected files ...

... //depot/perl/dosish.h#42 edit
... //depot/perl/embedvar.h#173 edit
... //depot/perl/epoc/epocish.h#16 edit
... //depot/perl/mpeix/mpeixish.h#10 edit
... //depot/perl/os2/os2ish.h#45 edit
... //depot/perl/perl.c#501 edit
... //depot/perl/perl.h#522 edit
... //depot/perl/perlapi.h#95 edit
... //depot/perl/perlvars.h#54 edit
... //depot/perl/plan9/plan9ish.h#14 edit
... //depot/perl/unixish.h#34 edit
... //depot/perl/vms/vmsish.h#60 edit

Differences ...

==== //depot/perl/dosish.h#42 (text) ====
Index: perl/dosish.h
--- perl/dosish.h#41~19878~     Sun Jun 29 02:28:58 2003
+++ perl/dosish.h       Fri Jul  4 01:33:32 2003
@@ -16,7 +16,7 @@
 #ifdef DJGPP
 #  define BIT_BUCKET "nul"
 #  define OP_BINARY O_BINARY
-#  define PERL_SYS_INIT(c,v) EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
Perl_DJGPP_init(c,v)
+#  define PERL_SYS_INIT(c,v) MALLOC_CHECK_TAINT2(*c,*v) Perl_DJGPP_init(c,v)
 #  define init_os_extras Perl_init_os_extras
 #  include <signal.h>
 #  define HAS_UTIME
@@ -29,15 +29,15 @@
 #  define PERL_FS_VER_FMT      "%d_%d_%d"
 #else  /* DJGPP */
 #  ifdef WIN32
-#    define PERL_SYS_INIT(c,v) EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
Perl_win32_init(c,v)
+#    define PERL_SYS_INIT(c,v) MALLOC_CHECK_TAINT2(*c,*v) Perl_win32_init(c,v)
 #    define PERL_SYS_TERM()    Perl_win32_term()
 #    define BIT_BUCKET "nul"
 #  else
 #       ifdef NETWARE
-#      define PERL_SYS_INIT(c,v)       EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
Perl_nw5_init(c,v)
+#      define PERL_SYS_INIT(c,v)       MALLOC_CHECK_TAINT2(*c,*v) Perl_nw5_init(c,v)
 #      define BIT_BUCKET "nwnul"
 #    else
-#      define PERL_SYS_INIT(c,v)       EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v)
+#      define PERL_SYS_INIT(c,v)       MALLOC_CHECK_TAINT2(*c,*v)
 #      define BIT_BUCKET "\\dev\\nul" /* "wanna be like, umm, Newlined, or somethin?" 
*/
 #    endif /* NETWARE */
 #  endif

==== //depot/perl/embedvar.h#173 (text+w) ====
Index: perl/embedvar.h
--- perl/embedvar.h#172~19863~  Fri Jun 27 01:15:11 2003
+++ perl/embedvar.h     Fri Jul  4 01:33:32 2003
@@ -897,7 +897,6 @@
 #define PL_curinterp           (PL_Vars.Gcurinterp)
 #define PL_do_undump           (PL_Vars.Gdo_undump)
 #define PL_dollarzero_mutex    (PL_Vars.Gdollarzero_mutex)
-#define PL_earlytaint          (PL_Vars.Gearlytaint)
 #define PL_hexdigit            (PL_Vars.Ghexdigit)
 #define PL_malloc_mutex                (PL_Vars.Gmalloc_mutex)
 #define PL_op_mutex            (PL_Vars.Gop_mutex)
@@ -912,7 +911,6 @@
 #define PL_Gcurinterp          PL_curinterp
 #define PL_Gdo_undump          PL_do_undump
 #define PL_Gdollarzero_mutex   PL_dollarzero_mutex
-#define PL_Gearlytaint         PL_earlytaint
 #define PL_Ghexdigit           PL_hexdigit
 #define PL_Gmalloc_mutex       PL_malloc_mutex
 #define PL_Gop_mutex           PL_op_mutex

==== //depot/perl/epoc/epocish.h#16 (text) ====
Index: perl/epoc/epocish.h
--- perl/epoc/epocish.h#15~19878~       Sun Jun 29 02:28:58 2003
+++ perl/epoc/epocish.h Fri Jul  4 01:33:32 2003
@@ -108,7 +108,7 @@
 
 /* epocemx setenv bug workaround */
 #ifndef PERL_SYS_INIT
-#    define PERL_SYS_INIT(c,v)    EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
putenv(".dummy=foo"); putenv(".dummy"); MALLOC_INIT
+#    define PERL_SYS_INIT(c,v)    MALLOC_CHECK_TAINT2(*c,*v) putenv(".dummy=foo"); 
putenv(".dummy"); MALLOC_INIT
 #endif
 
 #ifndef PERL_SYS_TERM

==== //depot/perl/mpeix/mpeixish.h#10 (text) ====
Index: perl/mpeix/mpeixish.h
--- perl/mpeix/mpeixish.h#9~19878~      Sun Jun 29 02:28:58 2003
+++ perl/mpeix/mpeixish.h       Fri Jul  4 01:33:32 2003
@@ -113,7 +113,7 @@
 #define Mkdir(path,mode)   mkdir((path),(mode))
 
 #ifndef PERL_SYS_INIT
-#  define PERL_SYS_INIT(c,v) EARLY_INIT2(*c,*v) PERL_FPU_INIT MALLOC_INIT
+#  define PERL_SYS_INIT(c,v)   PERL_FPU_INIT MALLOC_INIT
 #endif
 
 #ifndef PERL_SYS_TERM

==== //depot/perl/os2/os2ish.h#45 (text) ====
Index: perl/os2/os2ish.h
--- perl/os2/os2ish.h#44~19878~ Sun Jun 29 02:28:58 2003
+++ perl/os2/os2ish.h   Fri Jul  4 01:33:32 2003
@@ -218,7 +218,6 @@
 
 #  define PERL_SYS_INIT3(argcp, argvp, envp)   \
   { void *xreg[2];                             \
-    EARLY_INIT3(argcp, argvp, envp)            \
     MALLOC_CHECK_TAINT(*argcp, *argvp, *envp)  \
     _response(argcp, argvp);                   \
     _wildcard(argcp, argvp);                   \
@@ -226,7 +225,6 @@
 
 #  define PERL_SYS_INIT(argcp, argvp)  {       \
   { void *xreg[2];                             \
-    EARLY_INIT2(argcp, argvp)                  \
     _response(argcp, argvp);                   \
     _wildcard(argcp, argvp);                   \
     Perl_OS2_init3(NULL, xreg, 0)
@@ -235,11 +233,9 @@
 
 #  define PERL_SYS_INIT3(argcp, argvp, envp)   \
   { void *xreg[2];                             \
-    EARLY_INIT3(argcp, argvp, envp)            \
     Perl_OS2_init3(*envp, xreg, 0)
 #  define PERL_SYS_INIT(argcp, argvp)  {       \
   { void *xreg[2];                             \
-    EARLY_INIT2(argcp, argvp)                  \
     Perl_OS2_init3(NULL, xreg, 0)
 #endif
 

==== //depot/perl/perl.c#501 (text) ====
Index: perl/perl.c
--- perl/perl.c#500~19906~      Tue Jul  1 01:03:17 2003
+++ perl/perl.c Fri Jul  4 01:33:32 2003
@@ -274,39 +274,6 @@
 
     PL_stashcache = newHV();
 
-#if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT)
-    /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0 */
-    {
-       char *s = NULL;
-
-       if (!PL_earlytaint)
-          s = PerlEnv_getenv("PERL_HASH_SEED");
-       if (s)
-           while (isSPACE(*s)) s++;
-       if (s && isDIGIT(*s))
-           PL_hash_seed = (UV)Atoul(s);
-#ifndef USE_HASH_SEED_EXPLICIT
-       else {
-           /* Compute a random seed */
-           (void)seedDrand01((Rand_seed_t)seed());
-           PL_srand_called = TRUE;
-           PL_hash_seed = (UV)(Drand01() * (NV)UV_MAX);
-#if RANDBITS < (UVSIZE * 8)
-           {
-               int skip = (UVSIZE * 8) - RANDBITS;
-               PL_hash_seed >>= skip;
-               /* The low bits might need extra help. */
-               PL_hash_seed += (UV)(Drand01() * ((1 << skip) - 1));
-           }
-#endif /* RANDBITS < (UVSIZE * 8) */
-       }
-#endif /* USE_HASH_SEED_EXPLICIT */
-       if (!PL_earlytaint && (s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG")))
-          PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n",
-                        PL_hash_seed);
-    }
-#endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */
-
     ENTER;
 }
 
@@ -930,6 +897,41 @@
 #endif
 #endif
 
+#if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT)
+    /* [perl #22371] Algorimic Complexity Attack on Perl 5.6.1, 5.8.0
+     * This MUST be done before any hash stores or fetches take place. */
+    {
+       bool earlytaint = doing_taint(argc, argv, env);
+       char *s = NULL;
+
+       if (!earlytaint)
+          s = PerlEnv_getenv("PERL_HASH_SEED");
+       if (s)
+           while (isSPACE(*s)) s++;
+       if (s && isDIGIT(*s))
+           PL_hash_seed = (UV)Atoul(s);
+#ifndef USE_HASH_SEED_EXPLICIT
+       else {
+           /* Compute a random seed */
+           (void)seedDrand01((Rand_seed_t)seed());
+           PL_srand_called = TRUE;
+           PL_hash_seed = (UV)(Drand01() * (NV)UV_MAX);
+#if RANDBITS < (UVSIZE * 8)
+           {
+               int skip = (UVSIZE * 8) - RANDBITS;
+               PL_hash_seed >>= skip;
+               /* The low bits might need extra help. */
+               PL_hash_seed += (UV)(Drand01() * ((1 << skip) - 1));
+           }
+#endif /* RANDBITS < (UVSIZE * 8) */
+       }
+#endif /* USE_HASH_SEED_EXPLICIT */
+       if (!earlytaint && (s = PerlEnv_getenv("PERL_HASH_SEED_DEBUG")))
+          PerlIO_printf(Perl_debug_log, "HASH_SEED = %"UVuf"\n",
+                        PL_hash_seed);
+    }
+#endif /* #if defined(USE_HASH_SEED) || defined(USE_HASH_SEED_EXPLICIT) */
+
     PL_origargc = argc;
     PL_origargv = argv;
 
@@ -3432,8 +3434,7 @@
 
 /* This is used very early in the lifetime of the program,
  * before even the options are parsed, so PL_tainting has
- * not been initialized properly.  The variable PL_earlytaint
- * is set early in main() to the result of this function. */
+ * not been initialized properly.  */
 bool
 Perl_doing_taint(int argc, char *argv[], char *envp[])
 {

==== //depot/perl/perl.h#522 (text) ====
Index: perl/perl.h
--- perl/perl.h#521~19897~      Mon Jun 30 22:04:50 2003
+++ perl/perl.h Fri Jul  4 01:33:32 2003
@@ -499,7 +499,7 @@
                  panic_write2("panic: tainting with $ENV{PERL_MALLOC_OPT}\n");\
                  exit(1); })
 #  define MALLOC_CHECK_TAINT(argc,argv,env)    STMT_START {    \
-       if (PL_earlytaint) {                                    \
+       if (doing_taint(argc,argv,env)) {                       \
                MallocCfg_ptr[MallocCfg_skip_cfg_env] = 1;      \
     }} STMT_END;
 #else  /* MYMALLOC */
@@ -1940,23 +1940,6 @@
 #      define PERL_FPU_INIT
 #    endif
 #  endif
-#endif
-
-/* The PL_earlytaint is to be used instead PL_tainting before
- * perl_parse() has had the chance to set up PL_tainting. */
-
-#ifndef EARLY_INIT3
-#  define EARLY_INIT3(argcp,argvp,envp) \
-       STMT_START {            \
-               PL_earlytaint = doing_taint(argcp, argvp, envp); \
-       } STMT_END;
-#endif
-
-#ifndef EARLY_INIT2
-#  define EARLY_INIT2(argcp,argvp) \
-       STMT_START {            \
-               PL_earlytaint = doing_taint(argcp, argvp, 0); \
-       } STMT_END;
 #endif
 
 #ifndef PERL_SYS_INIT3

==== //depot/perl/perlapi.h#95 (text+w) ====
Index: perl/perlapi.h
--- perl/perlapi.h#94~19863~    Fri Jun 27 01:15:11 2003
+++ perl/perlapi.h      Fri Jul  4 01:33:32 2003
@@ -934,8 +934,6 @@
 #define PL_do_undump           (*Perl_Gdo_undump_ptr(NULL))
 #undef  PL_dollarzero_mutex
 #define PL_dollarzero_mutex    (*Perl_Gdollarzero_mutex_ptr(NULL))
-#undef  PL_earlytaint
-#define PL_earlytaint          (*Perl_Gearlytaint_ptr(NULL))
 #undef  PL_hexdigit
 #define PL_hexdigit            (*Perl_Ghexdigit_ptr(NULL))
 #undef  PL_malloc_mutex

==== //depot/perl/perlvars.h#54 (text) ====
Index: perl/perlvars.h
--- perl/perlvars.h#53~19863~   Fri Jun 27 01:15:11 2003
+++ perl/perlvars.h     Fri Jul  4 01:33:32 2003
@@ -55,5 +55,3 @@
 /* This is constant on most architectures, a global on OS/2 */
 PERLVARI(Gsh_path,     char *, SH_PATH)/* full path of shell */
 
-PERLVAR(Gearlytaint,   bool)   /* Early warning for taint, before PL_tainting  is set 
*/
-

==== //depot/perl/plan9/plan9ish.h#14 (text) ====
Index: perl/plan9/plan9ish.h
--- perl/plan9/plan9ish.h#13~19878~     Sun Jun 29 02:28:58 2003
+++ perl/plan9/plan9ish.h       Fri Jul  4 01:33:32 2003
@@ -106,7 +106,7 @@
 #define ABORT() kill(PerlProc_getpid(),SIGABRT);
 
 #define BIT_BUCKET "/dev/null"
-#define PERL_SYS_INIT(c,v)     EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
MALLOC_INIT
+#define PERL_SYS_INIT(c,v)     MALLOC_CHECK_TAINT2(*c,*v) MALLOC_INIT
 #define dXSUB_SYS
 #define PERL_SYS_TERM()                MALLOC_TERM
 

==== //depot/perl/unixish.h#34 (text) ====
Index: perl/unixish.h
--- perl/unixish.h#33~19878~    Sun Jun 29 02:28:58 2003
+++ perl/unixish.h      Fri Jul  4 01:33:32 2003
@@ -129,7 +129,7 @@
 #define Mkdir(path,mode)   mkdir((path),(mode))
 
 #ifndef PERL_SYS_INIT
-#  define PERL_SYS_INIT(c,v) EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
PERL_FPU_INIT MALLOC_INIT
+#  define PERL_SYS_INIT(c,v) MALLOC_CHECK_TAINT2(*c,*v) PERL_FPU_INIT MALLOC_INIT
 #endif
 
 #ifndef PERL_SYS_TERM

==== //depot/perl/vms/vmsish.h#60 (text) ====
Index: perl/vms/vmsish.h
--- perl/vms/vmsish.h#59~19878~ Sun Jun 29 02:28:58 2003
+++ perl/vms/vmsish.h   Fri Jul  4 01:33:32 2003
@@ -331,7 +331,7 @@
 #endif
 
 #define BIT_BUCKET "_NLA0:"
-#define PERL_SYS_INIT(c,v)     EARLY_INIT2(*c,*v) MALLOC_CHECK_TAINT2(*c,*v) 
vms_image_init((c),(v)); MALLOC_INIT
+#define PERL_SYS_INIT(c,v)     MALLOC_CHECK_TAINT2(*c,*v) vms_image_init((c),(v)); 
MALLOC_INIT
 #define PERL_SYS_TERM()                OP_REFCNT_TERM; MALLOC_TERM
 #define dXSUB_SYS
 #define HAS_KILL
End of Patch.

Reply via email to