[perl #37648] segfault with PERLIO_DEBUG
[p5sagit/p5-mst-13.2.git] / pp_hot.c
index 2a08525..0f13d5a 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -329,21 +329,23 @@ PP(pp_or)
 PP(pp_defined)
 {
     dSP;
-    register SV* sv;
+    register SV* sv = NULL;
     bool defined = FALSE;
     const int op_type = PL_op->op_type;
 
     if(op_type == OP_DOR || op_type == OP_DORASSIGN) {
         sv = TOPs;
         if (!sv || !SvANY(sv)) {
-            --SP;
+           if (op_type == OP_DOR)
+               --SP;
             RETURNOP(cLOGOP->op_other);
         }
     } else if (op_type == OP_DEFINED) {
         sv = POPs;
         if (!sv || !SvANY(sv))
             RETPUSHNO;
-    }
+    } else
+        DIE(aTHX_ "panic:  Invalid op (%s) in pp_defined()", OP_NAME(PL_op));
 
     switch (SvTYPE(sv)) {
     case SVt_PVAV:
@@ -370,11 +372,11 @@ PP(pp_defined)
         if(op_type == OP_DOR)
             --SP;
         RETURNOP(cLOGOP->op_other);
-    } else if (op_type == OP_DEFINED) {
-        if(defined) 
-            RETPUSHYES;
-        RETPUSHNO;
     }
+    /* assuming OP_DEFINED */
+    if(defined) 
+        RETPUSHYES;
+    RETPUSHNO;
 }
 
 PP(pp_add)