5656import org .owasp .benchmarkutils .entities .TestCaseSetup ;
5757import org .owasp .benchmarkutils .entities .TestCaseSetupException ;
5858import org .owasp .benchmarkutils .entities .TestSuite ;
59+ import org .owasp .benchmarkutils .entities .VerifyFixOutput ;
5960import org .owasp .benchmarkutils .helpers .Utils ;
6061import org .xml .sax .SAXException ;
6162
@@ -115,6 +116,10 @@ public class BenchmarkCrawlerVerification extends BenchmarkCrawler {
115116 private Map <String , TestCaseVerificationResults > testCaseNameToTestCaseVerificationResultsMap =
116117 new HashMap <>();
117118
119+ private List <VerifyFixOutput > exploitedFixedTestcases = new ArrayList <>();
120+ private List <VerifyFixOutput > brokenFixedTestcases = new ArrayList <>();
121+ private List <VerifyFixOutput > notVerifiableFixedTestcases = new ArrayList <>();
122+
118123 BenchmarkCrawlerVerification () {
119124 // A default constructor required to support Maven plugin API.
120125 // The theCrawlerFile has to be instantiated before a crawl can be done.
@@ -133,6 +138,7 @@ protected void crawl(TestSuite testSuite) throws Exception {
133138 List <TestCaseVerificationResults > results =
134139 new ArrayList <TestCaseVerificationResults >();
135140
141+ Files .createDirectories (Paths .get (getOutputDirectory ()));
136142 final File FILE_NON_DISCRIMINATORY_LOG =
137143 new File (getOutputDirectory (), FILENAME_NON_DISCRIMINATORY_LOG );
138144 final File FILE_ERRORS_LOG = new File (getOutputDirectory (), FILENAME_ERRORS_LOG );
@@ -391,6 +397,7 @@ protected void crawl(TestSuite testSuite) throws Exception {
391397 System .out .printf ("Test case time measurements written to: %s%n" , FILE_TIMES_LOG );
392398
393399 RegressionTesting .printCrawlSummary (results );
400+ printFixVerificationSummary ();
394401 System .out .println ();
395402 System .out .println (completionMessage );
396403 }
@@ -399,6 +406,15 @@ protected void crawl(TestSuite testSuite) throws Exception {
399406 // cleanupSetups(setups);
400407 }
401408
409+ private void printFixVerificationSummary () {
410+ System .out .println ("Fix verification summary:" );
411+ System .out .println ();
412+ System .out .println ("\t Exploited fixed test cases:\t " + exploitedFixedTestcases .size ());
413+ System .out .println ("\t Broken fixed test cases:\t " + brokenFixedTestcases .size ());
414+ System .out .println (
415+ "\t Not verifiable fixed test cases:\t " + notVerifiableFixedTestcases .size ());
416+ }
417+
402418 /**
403419 * @param testSuite
404420 * @throws Exception
@@ -599,7 +615,7 @@ private boolean verifyFix(
599615 TestCaseVerificationResults beforeFixResults ,
600616 TestCaseVerificationResults afterFixResults ) {
601617
602- boolean wasNotVerfiable =
618+ boolean wasNotVerifiable =
603619 afterFixResults .getTestCase ().isVulnerability ()
604620 && afterFixResults .getTestCase ().isUnverifiable ()
605621 && afterFixResults .isPassed ();
@@ -612,22 +628,32 @@ private boolean verifyFix(
612628 .getResponseToSafeValue ()
613629 .getResponseString ()
614630 .equals (afterFixResults .getResponseToSafeValue ().getResponseString ());
615- if (wasNotVerfiable ) {
631+
632+ VerifyFixOutput verifyFixOutput = new VerifyFixOutput ();
633+ verifyFixOutput .setTestCaseName (afterFixResults .getTestCase ().getName ());
634+ verifyFixOutput .setUnfixedSafeResponseInfo (beforeFixResults .getResponseToSafeValue ());
635+ verifyFixOutput .setUnfixedAttackResponseInfo (beforeFixResults .getResponseToAttackValue ());
636+ verifyFixOutput .setFixedSafeResponseInfo (afterFixResults .getResponseToSafeValue ());
637+ verifyFixOutput .setFixedAttackResponseInfo (afterFixResults .getResponseToAttackValue ());
638+ verifyFixOutput .setWasNotVerifiable (wasNotVerifiable );
639+ verifyFixOutput .setWasExploited (wasExploited );
640+ verifyFixOutput .setWasBroken (wasBroken );
641+
642+ if (wasNotVerifiable ) {
616643 System .out .println ("NOT FIXED: Vulnerability could not be verified" );
644+ notVerifiableFixedTestcases .add (verifyFixOutput );
617645 }
618646 if (wasExploited ) {
619647 System .out .println ("NOT FIXED: Vulnerability was exploited" );
648+ exploitedFixedTestcases .add (verifyFixOutput );
620649 }
621650 if (wasBroken ) {
622651 System .out .println ("NOT FIXED: Functionality was broken" );
652+ brokenFixedTestcases .add (verifyFixOutput );
623653 }
624654
625655 File verifyFixResultFile = new File (getOutputDirectory (), FILENAME_VERIFY_FIX_RESULT );
626656 try (BufferedWriter writer = new BufferedWriter (new FileWriter (verifyFixResultFile ))) {
627- VerifyFixOutput verifyFixOutput = new VerifyFixOutput ();
628- verifyFixOutput .setWasNotVerfiable (wasNotVerfiable );
629- verifyFixOutput .setWasExploited (wasExploited );
630- verifyFixOutput .setWasBroken (wasBroken );
631657 String output = Utils .objectToJson (verifyFixOutput );
632658 // System.out.println(output);
633659 writer .write (output );
@@ -640,7 +666,7 @@ private boolean verifyFix(
640666 e .printStackTrace ();
641667 }
642668
643- return !wasNotVerfiable && !wasExploited && !wasBroken ;
669+ return !wasNotVerifiable && !wasExploited && !wasBroken ;
644670 }
645671
646672 private boolean verifyFixes (
0 commit comments