diff --git a/tests/FILEFORMAT b/tests/FILEFORMAT
index 3edb91b49..58d37410e 100644
--- a/tests/FILEFORMAT
+++ b/tests/FILEFORMAT
@@ -190,4 +190,7 @@ the file's contents must be identical to this
the contents of the upload data curl should have sent
+
+disable - disables the valgrind log check for this test
+
diff --git a/tests/runtests.pl b/tests/runtests.pl
index 010c6ed0f..db06ec53f 100755
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@ -1351,13 +1351,6 @@ sub singletest {
return 1;
}
- # the test succeeded, remove all log files
- if(!$keepoutfiles) {
- cleardir($LOGDIR);
- }
-
- unlink($FTPDCMD); # remove the instructions for this test
-
@what = getpart("client", "killserver");
for(@what) {
my $serv = $_;
@@ -1398,41 +1391,75 @@ sub singletest {
}
}
if($valgrind) {
- opendir(DIR, "log") ||
- return 0; # can't open log dir
- my @files = readdir(DIR);
- closedir DIR;
- my $f;
- my $l;
- foreach $f (@files) {
- if($f =~ /^valgrind$testnum/) {
- $l = $f;
- last;
+ # this is the valid protocol blurb curl should generate
+ my @disable= getpart("verify", "valgrind");
+
+ if($disable[0] !~ /disable/) {
+
+ opendir(DIR, "log") ||
+ return 0; # can't open log dir
+ my @files = readdir(DIR);
+ closedir DIR;
+ my $f;
+ my $l;
+ foreach $f (@files) {
+ if($f =~ /^valgrind$testnum\.pid/) {
+ $l = $f;
+ last;
+ }
+ }
+ my $leak;
+ my $invalidread;
+ my $error;
+
+ open(VAL, ") {
+ if($_ =~ /definitely lost: (\d*) bytes/) {
+ $leak = $1;
+ if($leak) {
+ $error++;
+ }
+ last;
+ }
+ if($_ =~ /Invalid read of size (\d+)/) {
+ $invalidread = $1;
+ $error++;
+ last;
+ }
+ }
+ close(VAL);
+ if($error) {
+ print " valgrind ERROR ";
+ if($leak) {
+ print "\n Leaked $leak bytes\n";
+ }
+ if($invalidread) {
+ print "\n Read $invalidread invalid bytes\n";
+ }
+ return 1;
+ }
+ elsif(!$short) {
+ print " valgrind OK";
}
}
- my $leak;
- open(VAL, "<$l");
- while() {
- if($_ =~ /definitely lost: (\d*) bytes/) {
- $leak = $1;
- last;
+ else {
+ if(!$short) {
+ print " valgrind SKIPPED";
}
}
- close(VAL);
- if($leak) {
- print " valgrind ERROR ";
- }
- elsif(!$short) {
- print " valgrind OK";
- }
-
-
}
if($short) {
print "OK";
}
print "\n";
+ # the test succeeded, remove all log files
+ if(!$keepoutfiles) {
+ cleardir($LOGDIR);
+ }
+
+ unlink($FTPDCMD); # remove the instructions for this test
+
return 0;
}