Ensure that the pointer to S_incpush_use_sep() is never NULL.
Nicholas Clark [Sun, 15 Feb 2009 21:53:50 +0000 (21:53 +0000)]
embed.fnc
perl.c
proto.h

index 5c76901..cd3e015 100644 (file)
--- a/embed.fnc
+++ b/embed.fnc
@@ -1475,7 +1475,7 @@ s |void   |find_beginning |NN SV* linestr_sv|NN PerlIO *rsfp
 s      |void   |forbid_setid   |const char flag|const bool suidscript
 s      |void   |incpush        |NULLOK const char *const dir|STRLEN len \
                                |U32 flags
-s      |void   |incpush_use_sep|NULLOK const char *p|U32 flags
+s      |void   |incpush_use_sep|NN const char *p|U32 flags
 s      |void   |init_interp
 s      |void   |init_ids
 s      |void   |init_main_stash
diff --git a/perl.c b/perl.c
index a308cf3..9e52c98 100644 (file)
--- a/perl.c
+++ b/perl.c
@@ -4110,8 +4110,11 @@ S_init_perllib(pTHX_ U32 old_vers)
        if (s)
 #endif
            incpush_use_sep(s, old_vers ? old_vers : INCPUSH_ADD_SUB_DIRS);
-       else if (!old_vers)
-           incpush_use_sep(PerlEnv_getenv("PERLLIB"), 0);
+       else if (!old_vers) {
+           s = PerlEnv_getenv("PERLLIB");
+           if (s)
+               incpush_use_sep(s, 0);
+       }
 #else /* VMS */
        /* Treat PERL5?LIB as a possible search list logical name -- the
         * "natural" VMS idiom for a Unix path string.  We allow each
@@ -4542,8 +4545,10 @@ S_incpush_use_sep(pTHX_ const char *p, U32 flags)
     /* This logic has been broken out from S_incpush(). It may be possible to
        simplify it.  */
 
+    PERL_ARGS_ASSERT_INCPUSH_USE_SEP;
+
     /* Break at all separators */
-    while (p && *p) {
+    while (*p) {
         const char *s;
 
        /* skip any consecutive separators */
diff --git a/proto.h b/proto.h
index a2139db..0fb1c33 100644 (file)
--- a/proto.h
+++ b/proto.h
@@ -4760,7 +4760,11 @@ STATIC void      S_find_beginning(pTHX_ SV* linestr_sv, PerlIO *rsfp)
 
 STATIC void    S_forbid_setid(pTHX_ const char flag, const bool suidscript);
 STATIC void    S_incpush(pTHX_ const char *const dir, STRLEN len, U32 flags);
-STATIC void    S_incpush_use_sep(pTHX_ const char *p, U32 flags);
+STATIC void    S_incpush_use_sep(pTHX_ const char *p, U32 flags)
+                       __attribute__nonnull__(pTHX_1);
+#define PERL_ARGS_ASSERT_INCPUSH_USE_SEP       \
+       assert(p)
+
 STATIC void    S_init_interp(pTHX);
 STATIC void    S_init_ids(pTHX);
 STATIC void    S_init_main_stash(pTHX);