OpenBSD flags tweak from Todd C. Miller, tweaked some more by Abigail.
[p5sagit/p5-mst-13.2.git] / pp_ctl.c
index 3cc74e5..c949e78 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -2728,7 +2728,9 @@ S_doeval(pTHX_ int gimme, OP** startop)
     AV* comppadlist;
     I32 i;
 
-    PL_in_eval = EVAL_INEVAL;
+    PL_in_eval = ((saveop && saveop->op_type == OP_REQUIRE)
+                 ? (EVAL_INREQUIRE | (PL_in_eval & EVAL_INEVAL))
+                 : EVAL_INEVAL);
 
     PUSHMARK(SP);
 
@@ -2891,6 +2893,7 @@ S_doeval(pTHX_ int gimme, OP** startop)
     CvDEPTH(PL_compcv) = 1;
     SP = PL_stack_base + POPMARK;              /* pop original mark */
     PL_op = saveop;                    /* The caller may need it. */
+    PL_lex_state = LEX_NOTPARSING;     /* $^S needs this. */
 #ifdef USE_THREADS
     MUTEX_LOCK(&PL_eval_mutex);
     PL_eval_owner = 0;
@@ -2959,13 +2962,13 @@ PP(pp_require)
            U8 *s = (U8*)SvPVX(sv);
            U8 *end = (U8*)SvPVX(sv) + SvCUR(sv);
            if (s < end) {
-               rev = utf8_to_uv(s, &len, 0);
+               rev = utf8_to_uv_chk(s, &len, 0);
                s += len;
                if (s < end) {
-                   ver = utf8_to_uv(s, &len, 0);
+                   ver = utf8_to_uv_chk(s, &len, 0);
                    s += len;
                    if (s < end)
-                       sver = utf8_to_uv(s, &len, 0);
+                       sver = utf8_to_uv_chk(s, &len, 0);
                }
            }
            if (PERL_REVISION < rev