// 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); }
// 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); }