]> granicus.if.org Git - curl/commitdiff
runtests: clear old setenv remainders before test
authorDaniel Stenberg <daniel@haxx.se>
Wed, 11 Aug 2010 21:12:39 +0000 (23:12 +0200)
committerDaniel Stenberg <daniel@haxx.se>
Wed, 11 Aug 2010 21:12:39 +0000 (23:12 +0200)
Due to the layout of the singletest function there are situations where
it returns before it clears the environment variables that were
especially set for the single specific test case. That could lead to
subsequent tests getting executed with environment variables sticking
around from a previous test which could lead to badness.

This change makes sure to clear all custom variables that may be laying
around from a previous round, before running a test case.

Reported by: Kamil Dudka
Bug: http://curl.haxx.se/mail/lib-2010-08/0141.html

tests/runtests.pl

index a97d8647e1c0aef853db94573c62109f31c66813..9ddccc08461db0a5bbcfe37efce403041f879291 100755 (executable)
@@ -238,6 +238,7 @@ my %timesrvrlog; # timestamp for each test server logs lock removal
 my %timevrfyend; # timestamp for each test result verification end
 
 my $testnumcheck; # test number, set in singletest sub.
+my %oldenv;
 
 #######################################################################
 # variables the command line options may set
@@ -2361,7 +2362,18 @@ sub singletest {
     # test definition may instruct to (un)set environment vars
     # this is done this early, so that the precheck can use environment
     # variables and still bail out fine on errors
-    my %oldenv;
+
+    # restore environment variables that were modified in a previous run
+    foreach my $var (keys %oldenv) {
+        if($oldenv{$var} eq 'notset') {
+            delete $ENV{$var} if($ENV{$var});
+        }
+        else {
+            $ENV{$var} = $oldenv{$var};
+        }
+        delete $oldenv{$var};
+    }
+
     my @setenv = getpart("client", "setenv");
     if(@setenv) {
         foreach my $s (@setenv) {