示例#1
0
        // ugly regexp matching of clousot output to get our results
        public void ParseAndLogResults(string analysisResults, WarningInfo log)
        {
            Contract.Requires(analysisResults != null);
            Contract.Requires(log != null);
            var           hashNameDiscrepancies = Regex.Matches(analysisResults, "HashName Discrepancy:(.*)");
            List <string> interestingMethods    = new List <string>();

            foreach (Match match in hashNameDiscrepancies)
            {
                interestingMethods.Add(match.Groups[1].Value.ToString());
            }
            var methodMatchFailures = Regex.Match(analysisResults, "Failed to match ([0-9]+) methods");
            int matchFailures       = 0;

            if (methodMatchFailures.Success)
            {
                matchFailures = Convert.ToInt32(methodMatchFailures.Groups[1].Value);
            }
            log.LogMethodMatchFailures(matchFailures);
            int assertionsChecked = 0, assertionsCorrect = 0, assertionsUnknown = 0, assertionsFalse = 0, assertionsMasked = 0, assertionsUnreached = 0;
            int index = analysisResults.IndexOf("OutputSuggestion,,Checked ");

            if (index != -1)
            {
                string resultsLine = analysisResults.Substring(index);
                Console.WriteLine(resultsLine);
                var assertionsCheckedMatch   = Regex.Match(resultsLine, "Checked ([0-9]+) assertion");
                var assertionsCorrectMatch   = Regex.Match(resultsLine, "([0-9]+) correct");
                var assertionsUnknownMatch   = Regex.Match(resultsLine, "([0-9]+) unknown");
                var assertionsFalseMatch     = Regex.Match(resultsLine, "([0-9]+) false");
                var assertionsMaskedMatch    = Regex.Match(resultsLine, "([0-9]+) masked");
                var assertionsUnreachedMatch = Regex.Match(resultsLine, "([0-9]+) unreached");
                if (assertionsCheckedMatch.Success)
                {
                    assertionsChecked = Convert.ToInt32(assertionsCheckedMatch.Groups[1].Value);
                }
                if (assertionsCorrectMatch.Success)
                {
                    assertionsCorrect = Convert.ToInt32(assertionsCorrectMatch.Groups[1].Value);
                }
                if (assertionsUnknownMatch.Success)
                {
                    assertionsUnknown = Convert.ToInt32(assertionsUnknownMatch.Groups[1].Value);
                }
                if (assertionsFalseMatch.Success)
                {
                    assertionsFalse = Convert.ToInt32(assertionsFalseMatch.Groups[1].Value);
                }
                if (assertionsMaskedMatch.Success)
                {
                    assertionsMasked = Convert.ToInt32(assertionsMaskedMatch.Groups[1].Value);
                }
                if (assertionsUnreachedMatch.Success)
                {
                    assertionsUnreached = Convert.ToInt32(assertionsUnreachedMatch.Groups[1].Value);
                }
            }
            log.LogWarningInfo(assertionsChecked, assertionsCorrect, assertionsUnknown, assertionsFalse, assertionsMasked, assertionsUnreached, interestingMethods);
        }
示例#2
0
 // ugly regexp matching of clousot output to get our results
 public void ParseAndLogResults(string analysisResults, WarningInfo log)
 {
   Contract.Requires(analysisResults != null);
   Contract.Requires(log != null);
   var hashNameDiscrepancies = Regex.Matches(analysisResults, "HashName Discrepancy:(.*)");
   List<string> interestingMethods = new List<string>();
   foreach (Match match in hashNameDiscrepancies)
   {
     interestingMethods.Add(match.Groups[1].Value.ToString());
   }
   var methodMatchFailures = Regex.Match(analysisResults, "Failed to match ([0-9]+) methods");
   int matchFailures = 0;
   if (methodMatchFailures.Success) matchFailures = Convert.ToInt32(methodMatchFailures.Groups[1].Value);
   log.LogMethodMatchFailures(matchFailures);
   int assertionsChecked = 0, assertionsCorrect = 0, assertionsUnknown = 0, assertionsFalse = 0, assertionsMasked = 0, assertionsUnreached = 0;
   int index = analysisResults.IndexOf("OutputSuggestion,,Checked ");
   if (index != -1)
   {
     string resultsLine = analysisResults.Substring(index);
     Console.WriteLine(resultsLine);
     var assertionsCheckedMatch = Regex.Match(resultsLine, "Checked ([0-9]+) assertion");
     var assertionsCorrectMatch = Regex.Match(resultsLine, "([0-9]+) correct");
     var assertionsUnknownMatch = Regex.Match(resultsLine, "([0-9]+) unknown");
     var assertionsFalseMatch = Regex.Match(resultsLine, "([0-9]+) false");
     var assertionsMaskedMatch = Regex.Match(resultsLine, "([0-9]+) masked");
     var assertionsUnreachedMatch = Regex.Match(resultsLine, "([0-9]+) unreached");
     if (assertionsCheckedMatch.Success) assertionsChecked = Convert.ToInt32(assertionsCheckedMatch.Groups[1].Value);
     if (assertionsCorrectMatch.Success) assertionsCorrect = Convert.ToInt32(assertionsCorrectMatch.Groups[1].Value);
     if (assertionsUnknownMatch.Success) assertionsUnknown = Convert.ToInt32(assertionsUnknownMatch.Groups[1].Value);
     if (assertionsFalseMatch.Success) assertionsFalse = Convert.ToInt32(assertionsFalseMatch.Groups[1].Value);
     if (assertionsMaskedMatch.Success) assertionsMasked = Convert.ToInt32(assertionsMaskedMatch.Groups[1].Value);
     if (assertionsUnreachedMatch.Success) assertionsUnreached = Convert.ToInt32(assertionsUnreachedMatch.Groups[1].Value);
   }
   log.LogWarningInfo(assertionsChecked, assertionsCorrect, assertionsUnknown, assertionsFalse, assertionsMasked, assertionsUnreached, interestingMethods);
 }