RT#113730 - $@ should be cleared on "do" IO error.
authorEric Brine <ikegami@adaelis.com>
Mon, 18 Jun 2012 18:56:32 +0000 (14:56 -0400)
committerJesse Luehrs <doy@tozt.net>
Wed, 20 Jun 2012 22:08:24 +0000 (17:08 -0500)
pp_ctl.c
t/op/do.t

index b414e81..437bc8f 100644 (file)
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -3928,6 +3928,7 @@ PP(pp_require)
            DIE(aTHX_ "Can't locate %s", name);
        }
 
+       CLEAR_ERRSV();
        RETPUSHUNDEF;
     }
     else
index 93d3f73..c5a5905 100644 (file)
--- a/t/op/do.t
+++ b/t/op/do.t
@@ -286,4 +286,16 @@ SKIP: {
   is($w, undef, 'do STRING does not propagate warning hints');
 }
 
+# RT#113730 - $@ should be cleared on IO error.
+{
+    $@ = "should not see";
+    $! = 0;
+    my $rv = do("some nonexistent file");
+    my $saved_error = $@;
+    my $saved_errno = $!;
+    ok(!$rv,          "do returns false on io errror");
+    ok(!$saved_error, "\$\@ not set on io error");
+    ok($saved_errno,  "\$! set on io error");
+}
+
 done_testing();