mirror of
https://github.com/ysoftdevs/DependencyCheck.git
synced 2026-02-23 02:45:19 +01:00
1358 lines
173 KiB
HTML
1358 lines
173 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
<html>
|
|
<head>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
|
|
<title>Coverage Report</title>
|
|
<link title="Style" type="text/css" rel="stylesheet" href="css/main.css"/>
|
|
<script type="text/javascript" src="js/popup.js"></script>
|
|
</head>
|
|
<body>
|
|
<h5>Coverage Report - org.owasp.dependencycheck.analyzer.CPEAnalyzer</h5>
|
|
<div class="separator"> </div>
|
|
<table class="report">
|
|
<thead><tr> <td class="heading">Classes in this File</td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Line Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Branch Coverage</a></td> <td class="heading"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">Complexity</a></td></tr></thead>
|
|
<tr><td><a href="org.owasp.dependencycheck.analyzer.CPEAnalyzer.html">CPEAnalyzer</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">83%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:83px"><span class="text">194/232</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">76%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:76px"><span class="text">103/134</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.607142857142857;</span>4.607</td></tr>
|
|
<tr><td><a href="org.owasp.dependencycheck.analyzer.CPEAnalyzer.html">CPEAnalyzer$IdentifierConfidence</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">100%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:100px"><span class="text">4/4</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></td><td class="percentgraph"><div class="percentgraph"><div class="na" style="width:100px"><span class="text"><a class="dfn" href="help.html" onclick="popupwindow('help.html'); return false;">N/A</a></span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.607142857142857;</span>4.607</td></tr>
|
|
<tr><td><a href="org.owasp.dependencycheck.analyzer.CPEAnalyzer.html">CPEAnalyzer$IdentifierMatch</a></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">38%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:38px"><span class="text">15/39</span></div></div></td></tr></table></td><td><table cellpadding="0px" cellspacing="0px" class="percentgraph"><tr class="percentgraph"><td align="right" class="percentgraph" width="40">16%</td><td class="percentgraph"><div class="percentgraph"><div class="greenbar" style="width:16px"><span class="text">4/24</span></div></div></td></tr></table></td><td class="value"><span class="hidden">4.607142857142857;</span>4.607</td></tr>
|
|
|
|
</table>
|
|
<div class="separator"> </div>
|
|
<table cellspacing="0" cellpadding="0" class="src">
|
|
<tr> <td class="numLine"> 1</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 2</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * This file is part of dependency-check-core.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 3</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 4</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 5</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * you may not use this file except in compliance with the License.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 6</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * You may obtain a copy of the License at</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 7</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 8</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 9</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 10</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Unless required by applicable law or agreed to in writing, software</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 11</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 12</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 13</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * See the License for the specific language governing permissions and</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 14</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * limitations under the License.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 15</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 16</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Copyright (c) 2012 Jeremy Long. All Rights Reserved.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 17</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 18</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">package</span> org.owasp.dependencycheck.analyzer;</pre></td></tr>
|
|
<tr> <td class="numLine"> 19</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 20</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.IOException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 21</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.io.UnsupportedEncodingException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 22</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.net.URLEncoder;</pre></td></tr>
|
|
<tr> <td class="numLine"> 23</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.ArrayList;</pre></td></tr>
|
|
<tr> <td class="numLine"> 24</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Collections;</pre></td></tr>
|
|
<tr> <td class="numLine"> 25</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.List;</pre></td></tr>
|
|
<tr> <td class="numLine"> 26</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.Set;</pre></td></tr>
|
|
<tr> <td class="numLine"> 27</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> java.util.StringTokenizer;</pre></td></tr>
|
|
<tr> <td class="numLine"> 28</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.lucene.document.Document;</pre></td></tr>
|
|
<tr> <td class="numLine"> 29</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.lucene.index.CorruptIndexException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 30</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.lucene.queryparser.classic.ParseException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 31</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.lucene.search.ScoreDoc;</pre></td></tr>
|
|
<tr> <td class="numLine"> 32</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.apache.lucene.search.TopDocs;</pre></td></tr>
|
|
<tr> <td class="numLine"> 33</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.Engine;</pre></td></tr>
|
|
<tr> <td class="numLine"> 34</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.analyzer.exception.AnalysisException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 35</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.cpe.CpeMemoryIndex;</pre></td></tr>
|
|
<tr> <td class="numLine"> 36</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.cpe.Fields;</pre></td></tr>
|
|
<tr> <td class="numLine"> 37</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.cpe.IndexEntry;</pre></td></tr>
|
|
<tr> <td class="numLine"> 38</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.cpe.IndexException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 39</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.lucene.LuceneUtils;</pre></td></tr>
|
|
<tr> <td class="numLine"> 40</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.nvdcve.CveDB;</pre></td></tr>
|
|
<tr> <td class="numLine"> 41</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.data.nvdcve.DatabaseException;</pre></td></tr>
|
|
<tr> <td class="numLine"> 42</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.Confidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 43</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.Dependency;</pre></td></tr>
|
|
<tr> <td class="numLine"> 44</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.Evidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 45</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.EvidenceCollection;</pre></td></tr>
|
|
<tr> <td class="numLine"> 46</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.Identifier;</pre></td></tr>
|
|
<tr> <td class="numLine"> 47</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.dependency.VulnerableSoftware;</pre></td></tr>
|
|
<tr> <td class="numLine"> 48</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.utils.DependencyVersion;</pre></td></tr>
|
|
<tr> <td class="numLine"> 49</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.owasp.dependencycheck.utils.DependencyVersionUtil;</pre></td></tr>
|
|
<tr> <td class="numLine"> 50</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.slf4j.Logger;</pre></td></tr>
|
|
<tr> <td class="numLine"> 51</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">import</span> org.slf4j.LoggerFactory;</pre></td></tr>
|
|
<tr> <td class="numLine"> 52</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 53</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 54</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * CPEAnalyzer is a utility class that takes a project dependency and attempts</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 55</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * to discern if there is an associated CPE. It uses the evidence contained</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 56</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * within the dependency to search the Lucene index.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 57</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 58</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @author Jeremy Long</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 59</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 60</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">class</span> CPEAnalyzer <span class="keyword">implements</span> Analyzer {</pre></td></tr>
|
|
<tr> <td class="numLine"> 61</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 62</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 63</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The Logger.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 64</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 65</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">final</span> Logger LOGGER = LoggerFactory.getLogger(CPEAnalyzer.<span class="keyword">class</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 66</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 67</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The maximum number of query results to return.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 68</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 69</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> MAX_QUERY_RESULTS = 25;</pre></td></tr>
|
|
<tr> <td class="numLine"> 70</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 71</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The weighting boost to give terms when constructing the Lucene query.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 72</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 73</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> String WEIGHTING_BOOST = <span class="string">"^5"</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 74</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 75</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A string representation of a regular expression defining characters</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 76</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * utilized within the CPE Names.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 77</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 78</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> String CLEANSE_CHARACTER_RX = <span class="string">"[^A-Za-z0-9 ._-]"</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 79</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 80</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A string representation of a regular expression used to remove all but</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 81</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * alpha characters.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 82</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 83</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> String CLEANSE_NONALPHA_RX = <span class="string">"[^A-Za-z]*"</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 84</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 85</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The additional size to add to a new StringBuilder to account for extra</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 86</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * data that will be written into the string.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 87</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 88</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">static</span> <span class="keyword">final</span> <span class="keyword">int</span> STRING_BUILDER_BUFFER = 20;</pre></td></tr>
|
|
<tr> <td class="numLine"> 89</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 90</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The CPE in memory index.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 91</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 92</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> CpeMemoryIndex cpe;</pre></td></tr>
|
|
<tr> <td class="numLine"> 93</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 94</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The CVE Database.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 95</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 96</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> CveDB cve;</pre></td></tr>
|
|
<tr> <td class="numLine"> 97</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 98</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 99</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The URL to perform a search of the NVD CVE data at NIST.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 100</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 101</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">static</span> <span class="keyword">final</span> String NVD_SEARCH_URL = <span class="string">"https://web.nvd.nist.gov/view/vuln/search-results?adv_search=true&cves=on&cpe_version=%s"</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 102</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 103</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 104</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the name of this analyzer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 105</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 106</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the name of this analyzer.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 107</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 108</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 109</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> String getName() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 110</td> <td class="nbHitsCovered"> 32</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="string">"CPE Analyzer"</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 111</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 112</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 113</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 114</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the analysis phase that this analyzer should run in.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 115</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 116</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the analysis phase that this analyzer should run in.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 117</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 118</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 119</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> AnalysisPhase getAnalysisPhase() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 120</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">return</span> AnalysisPhase.IDENTIFIER_ANALYSIS;</pre></td></tr>
|
|
<tr> <td class="numLine"> 121</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 122</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 123</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 124</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Creates the CPE Lucene Index.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 125</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 126</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws Exception is thrown if there is an issue opening the index.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 127</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 128</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 129</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> initialize() <span class="keyword">throws</span> Exception {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 130</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.open();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 131</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 132</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 133</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 134</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Opens the data source.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 135</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 136</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException when the Lucene directory to be queried does not</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 137</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * exist or is corrupt.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 138</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws DatabaseException when the database throws an exception. This</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 139</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * usually occurs when the database is in use by another process.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 140</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 141</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> open() <span class="keyword">throws</span> IOException, DatabaseException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 142</td> <td class="nbHitsUncovered"><a title="Line 142: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 142: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!isOpen()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 143</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cve = <span class="keyword">new</span> CveDB();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 144</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cve.open();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 145</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cpe = CpeMemoryIndex.getInstance();</pre></td></tr>
|
|
<tr> <td class="numLine"> 146</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 147</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> LOGGER.info(<span class="string">"Creating the CPE Index"</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 148</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> <span class="keyword">final</span> <span class="keyword">long</span> creationStart = System.currentTimeMillis();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 149</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cpe.open(cve);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 150</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> LOGGER.info(<span class="string">"CPE Index Created ({} ms)"</span>, System.currentTimeMillis() - creationStart);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 151</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IndexException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 152</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.debug(<span class="string">"IndexException"</span>, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 153</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> DatabaseException(ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 154</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 155</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 156</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 157</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 158</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 159</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Closes the data sources.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 160</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 161</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 162</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> close() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 163</td> <td class="nbHitsUncovered"><a title="Line 163: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 163: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (cpe != <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 164</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cpe.close();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 165</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cpe = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 166</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 167</td> <td class="nbHitsUncovered"><a title="Line 167: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 167: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (cve != <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 168</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cve.close();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 169</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> cve = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 170</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 171</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 172</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 173</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> isOpen() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 174</td> <td class="nbHitsUncovered"><a title="Line 174: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 174: Conditional coverage 25% (1/4) [each condition: 50%, 0%]."> <span class="keyword">return</span> cpe != <span class="keyword">null</span> && cpe.isOpen();</a></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 175</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 176</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 177</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 178</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Searches the data store of CPE entries, trying to identify the CPE for</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 179</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the given dependency based on the evidence contained within. The</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 180</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * dependency passed in is updated with any identified CPE values.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 181</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 182</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param dependency the dependency to search for CPE entries on.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 183</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws CorruptIndexException is thrown when the Lucene index is corrupt.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 184</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws IOException is thrown when an IOException occurs.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 185</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws ParseException is thrown when the Lucene query cannot be parsed.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 186</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 187</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">void</span> determineCPE(Dependency dependency) <span class="keyword">throws</span> CorruptIndexException, IOException, ParseException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 188</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//TODO test dojo-war against this. we shold get dojo-toolkit:dojo-toolkit AND dojo-toolkit:toolkit</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 189</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> String vendors = <span class="string">""</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 190</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> String products = <span class="string">""</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 191</td> <td class="nbHitsCovered"><a title="Line 191: Conditional coverage 100% (2/2)."> 34</a></td> <td class="src"><pre class="src"> <a title="Line 191: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Confidence confidence : Confidence.values()) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 192</td> <td class="nbHitsCovered"><a title="Line 192: Conditional coverage 100% (2/2)."> 28</a></td> <td class="src"><pre class="src"> <a title="Line 192: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dependency.getVendorEvidence().contains(confidence)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 193</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> vendors = addEvidenceWithoutDuplicateTerms(vendors, dependency.getVendorEvidence(), confidence);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 194</td> <td class="nbHitsCovered"> 18</td> <td class="src"><pre class="src"> LOGGER.debug(<span class="string">"vendor search: {}"</span>, vendors);</pre></td></tr>
|
|
<tr> <td class="numLine"> 195</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 196</td> <td class="nbHitsCovered"><a title="Line 196: Conditional coverage 100% (2/2)."> 28</a></td> <td class="src"><pre class="src"> <a title="Line 196: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (dependency.getProductEvidence().contains(confidence)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 197</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> products = addEvidenceWithoutDuplicateTerms(products, dependency.getProductEvidence(), confidence);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 198</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> LOGGER.debug(<span class="string">"product search: {}"</span>, products);</pre></td></tr>
|
|
<tr> <td class="numLine"> 199</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 200</td> <td class="nbHitsUncovered"><a title="Line 200: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 28</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 200: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (!vendors.isEmpty() && !products.isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 201</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">final</span> List<IndexEntry> entries = searchCPE(vendors, products, dependency.getVendorEvidence().getWeighting(),</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 202</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> dependency.getProductEvidence().getWeighting());</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 203</td> <td class="nbHitsUncovered"><a title="Line 203: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 203: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (entries == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 204</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">continue</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 205</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 206</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> identifierAdded = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 207</td> <td class="nbHitsCovered"><a title="Line 207: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 207: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (IndexEntry e : entries) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 208</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> LOGGER.debug(<span class="string">"Verifying entry: {}"</span>, e);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 209</td> <td class="nbHitsCovered"><a title="Line 209: Conditional coverage 100% (2/2)."> 90</a></td> <td class="src"><pre class="src"> <a title="Line 209: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (verifyEntry(e, dependency)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 210</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String vendor = e.getVendor();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 211</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String product = e.getProduct();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 212</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> LOGGER.debug(<span class="string">"identified vendor/product: {}/{}"</span>, vendor, product);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 213</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> identifierAdded |= determineIdentifiers(dependency, vendor, product, confidence);</pre></td></tr>
|
|
<tr> <td class="numLine"> 214</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 215</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 216</td> <td class="nbHitsCovered"><a title="Line 216: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 216: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (identifierAdded) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 217</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 218</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 219</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 220</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 221</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 222</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 223</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 224</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Returns the text created by concatenating the text and the values from</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 225</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the EvidenceCollection (filtered for a specific confidence). This</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 226</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * attempts to prevent duplicate terms from being added.<br/<br/> Note, if</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 227</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the evidence is longer then 200 characters it will be truncated.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 228</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 229</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param text the base text.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 230</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param ec an EvidenceCollection</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 231</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param confidenceFilter a Confidence level to filter the evidence by.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 232</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the new evidence text</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 233</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 234</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> String addEvidenceWithoutDuplicateTerms(<span class="keyword">final</span> String text, <span class="keyword">final</span> EvidenceCollection ec, Confidence confidenceFilter) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 235</td> <td class="nbHitsUncovered"><a title="Line 235: Conditional coverage 50% (1/2)."> 34</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 235: Conditional coverage 50% (1/2)."> <span class="keyword">final</span> String txt = (text == <span class="keyword">null</span>) ? <span class="string">""</span> : text;</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 236</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> <span class="keyword">final</span> StringBuilder sb = <span class="keyword">new</span> StringBuilder(txt.length() + (20 * ec.size()));</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 237</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> sb.append(<span class="string">' '</span>).append(txt).append(<span class="string">' '</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 238</td> <td class="nbHitsCovered"><a title="Line 238: Conditional coverage 100% (2/2)."> 34</a></td> <td class="src"><pre class="src"> <a title="Line 238: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Evidence e : ec.iterator(confidenceFilter)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 239</td> <td class="nbHitsCovered"> 74</td> <td class="src"><pre class="src"> String value = e.getValue();</pre></td></tr>
|
|
<tr> <td class="numLine"> 240</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 241</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//hack to get around the fact that lucene does a really good job of recognizing domains and not</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 242</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// splitting them. TODO - put together a better lucene analyzer specific to the domain.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 243</td> <td class="nbHitsCovered"><a title="Line 243: Conditional coverage 100% (2/2)."> 74</a></td> <td class="src"><pre class="src"> <a title="Line 243: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (value.startsWith(<span class="string">"http://"</span>)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 244</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> value = value.substring(7).replaceAll(<span class="string">"\\."</span>, <span class="string">" "</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 245</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 246</td> <td class="nbHitsCovered"><a title="Line 246: Conditional coverage 100% (2/2)."> 74</a></td> <td class="src"><pre class="src"> <a title="Line 246: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (value.startsWith(<span class="string">"https://"</span>)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 247</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> value = value.substring(8).replaceAll(<span class="string">"\\."</span>, <span class="string">" "</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 248</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 249</td> <td class="nbHitsUncovered"><a title="Line 249: Conditional coverage 50% (1/2)."> 74</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 249: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (sb.indexOf(<span class="string">" "</span> + value + <span class="string">" "</span>) < 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 250</td> <td class="nbHitsCovered"> 74</td> <td class="src"><pre class="src"> sb.append(value).append(<span class="string">' '</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 251</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 252</td> <td class="nbHitsCovered"> 74</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 253</td> <td class="nbHitsCovered"> 34</td> <td class="src"><pre class="src"> <span class="keyword">return</span> sb.toString().trim();</pre></td></tr>
|
|
<tr> <td class="numLine"> 254</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 255</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 256</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 257</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 258</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Searches the Lucene CPE index to identify possible CPE entries associated</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 259</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * with the supplied vendor, product, and version.</p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 260</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 261</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 262</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * If either the vendorWeightings or productWeightings lists have been</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 263</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * populated this data is used to add weighting factors to the search.</p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 264</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 265</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param vendor the text used to search the vendor field</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 266</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param product the text used to search the product field</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 267</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param vendorWeightings a list of strings to use to add weighting factors</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 268</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * to the vendor field</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 269</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param productWeightings Adds a list of strings that will be used to add</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 270</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * weighting factors to the product search</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 271</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return a list of possible CPE values</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 272</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 273</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> List<IndexEntry> searchCPE(String vendor, String product,</pre></td></tr>
|
|
<tr> <td class="numLine"> 274</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> Set<String> vendorWeightings, Set<String> productWeightings) {</pre></td></tr>
|
|
<tr> <td class="numLine"> 275</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 276</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> List<IndexEntry> ret = <span class="keyword">new</span> ArrayList<IndexEntry>(MAX_QUERY_RESULTS);</pre></td></tr>
|
|
<tr> <td class="numLine"> 277</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 278</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String searchString = buildSearch(vendor, product, vendorWeightings, productWeightings);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 279</td> <td class="nbHitsUncovered"><a title="Line 279: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 279: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (searchString == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 280</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> ret;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 281</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 282</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 283</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> TopDocs docs = cpe.search(searchString, MAX_QUERY_RESULTS);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 284</td> <td class="nbHitsCovered"><a title="Line 284: Conditional coverage 100% (2/2)."> 372</a></td> <td class="src"><pre class="src"> <a title="Line 284: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (ScoreDoc d : docs.scoreDocs) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 285</td> <td class="nbHitsCovered"><a title="Line 285: Conditional coverage 100% (2/2)."> 350</a></td> <td class="src"><pre class="src"> <a title="Line 285: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (d.score >= 0.08) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 286</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> <span class="keyword">final</span> Document doc = cpe.getDocument(d.doc);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 287</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> <span class="keyword">final</span> IndexEntry entry = <span class="keyword">new</span> IndexEntry();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 288</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> entry.setVendor(doc.get(Fields.VENDOR));</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 289</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> entry.setProduct(doc.get(Fields.PRODUCT));</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 290</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> entry.setSearchScore(d.score);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 291</td> <td class="nbHitsUncovered"><a title="Line 291: Conditional coverage 50% (1/2)."> 90</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 291: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!ret.contains(entry)) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 292</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> ret.add(entry);</pre></td></tr>
|
|
<tr> <td class="numLine"> 293</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 294</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 295</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 296</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> ret;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 297</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ParseException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 298</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warn(<span class="string">"An error occurred querying the CPE data. See the log for more details."</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 299</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.info(<span class="string">"Unable to parse: {}"</span>, searchString, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 300</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 301</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.warn(<span class="string">"An error occurred reading CPE data. See the log for more details."</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 302</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LOGGER.info(<span class="string">"IO Error with search string: {}"</span>, searchString, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 303</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 304</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 305</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 306</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 307</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 308</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 309</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Builds a Lucene search string by properly escaping data and constructing</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 310</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * a valid search query.</p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 311</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 312</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * <p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 313</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * If either the possibleVendor or possibleProducts lists have been</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 314</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * populated this data is used to add weighting factors to the search string</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 315</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * generated.</p></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 316</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 317</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param vendor text to search the vendor field</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 318</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param product text to search the product field</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 319</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param vendorWeighting a list of strings to apply to the vendor to boost</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 320</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the terms weight</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 321</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param productWeightings a list of strings to apply to the product to</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 322</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * boost the terms weight</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 323</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the Lucene query</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 324</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 325</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> String buildSearch(String vendor, String product,</pre></td></tr>
|
|
<tr> <td class="numLine"> 326</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> Set<String> vendorWeighting, Set<String> productWeightings) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 327</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String v = vendor; <span class="comment">//.replaceAll("[^\\w\\d]", " ");</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 328</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String p = product; <span class="comment">//.replaceAll("[^\\w\\d]", " ");</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 329</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">final</span> StringBuilder sb = <span class="keyword">new</span> StringBuilder(v.length() + p.length()</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 330</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> + Fields.PRODUCT.length() + Fields.VENDOR.length() + STRING_BUILDER_BUFFER);</pre></td></tr>
|
|
<tr> <td class="numLine"> 331</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 332</td> <td class="nbHitsUncovered"><a title="Line 332: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 332: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!appendWeightedSearch(sb, Fields.PRODUCT, p, productWeightings)) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 333</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 334</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 335</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> sb.append(<span class="string">" AND "</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 336</td> <td class="nbHitsUncovered"><a title="Line 336: Conditional coverage 50% (1/2)."> 22</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 336: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!appendWeightedSearch(sb, Fields.VENDOR, v, vendorWeighting)) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 337</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">null</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 338</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 339</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">return</span> sb.toString();</pre></td></tr>
|
|
<tr> <td class="numLine"> 340</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 341</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 342</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 343</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * This method constructs a Lucene query for a given field. The searchText</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 344</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * is split into separate words and if the word is within the list of</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 345</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * weighted words then an additional weighting is applied to the term as it</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 346</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * is appended into the query.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 347</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 348</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param sb a StringBuilder that the query text will be appended to.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 349</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param field the field within the Lucene index that the query is</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 350</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * searching.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 351</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param searchText text used to construct the query.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 352</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param weightedText a list of terms that will be considered higher</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 353</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * importance when searching.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 354</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return if the append was successful.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 355</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 356</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> appendWeightedSearch(StringBuilder sb, String field, String searchText, Set<String> weightedText) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 357</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> sb.append(<span class="string">' '</span>).append(field).append(<span class="string">":( "</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 358</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 359</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String cleanText = cleanseText(searchText);</pre></td></tr>
|
|
<tr> <td class="numLine"> 360</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 361</td> <td class="nbHitsUncovered"><a title="Line 361: Conditional coverage 50% (1/2)."> 44</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 361: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (cleanText.isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 362</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 363</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 364</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 365</td> <td class="nbHitsUncovered"><a title="Line 365: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> 44</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 365: Conditional coverage 75% (3/4) [each condition: 50%, 100%]."> <span class="keyword">if</span> (weightedText == <span class="keyword">null</span> || weightedText.isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 366</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> LuceneUtils.appendEscapedLuceneQuery(sb, cleanText);</pre></td></tr>
|
|
<tr> <td class="numLine"> 367</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 368</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> StringTokenizer tokens = <span class="keyword">new</span> StringTokenizer(cleanText);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 369</td> <td class="nbHitsCovered"><a title="Line 369: Conditional coverage 100% (2/2)."> 214</a></td> <td class="src"><pre class="src"> <a title="Line 369: Conditional coverage 100% (2/2)."> <span class="keyword">while</span> (tokens.hasMoreElements()) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 370</td> <td class="nbHitsCovered"> 198</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String word = tokens.nextToken();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 371</td> <td class="nbHitsCovered"> 198</td> <td class="src"><pre class="src"> StringBuilder temp = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 372</td> <td class="nbHitsCovered"><a title="Line 372: Conditional coverage 100% (2/2)."> 198</a></td> <td class="src"><pre class="src"> <a title="Line 372: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String weighted : weightedText) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 373</td> <td class="nbHitsCovered"> 460</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String weightedStr = cleanseText(weighted);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 374</td> <td class="nbHitsCovered"><a title="Line 374: Conditional coverage 100% (2/2)."> 460</a></td> <td class="src"><pre class="src"> <a title="Line 374: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (equalsIgnoreCaseAndNonAlpha(word, weightedStr)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 375</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> temp = <span class="keyword">new</span> StringBuilder(word.length() + 2);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 376</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> LuceneUtils.appendEscapedLuceneQuery(temp, word);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 377</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> temp.append(WEIGHTING_BOOST);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 378</td> <td class="nbHitsUncovered"><a title="Line 378: Conditional coverage 50% (1/2)."> 14</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 378: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!word.equalsIgnoreCase(weightedStr)) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 379</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> temp.append(<span class="string">' '</span>);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 380</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> LuceneUtils.appendEscapedLuceneQuery(temp, weightedStr);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 381</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> temp.append(WEIGHTING_BOOST);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 382</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 383</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">break</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 384</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 385</td> <td class="nbHitsCovered"> 446</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 386</td> <td class="nbHitsCovered"> 198</td> <td class="src"><pre class="src"> sb.append(<span class="string">' '</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 387</td> <td class="nbHitsCovered"><a title="Line 387: Conditional coverage 100% (2/2)."> 198</a></td> <td class="src"><pre class="src"> <a title="Line 387: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (temp == <span class="keyword">null</span>) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 388</td> <td class="nbHitsCovered"> 184</td> <td class="src"><pre class="src"> LuceneUtils.appendEscapedLuceneQuery(sb, word);</pre></td></tr>
|
|
<tr> <td class="numLine"> 389</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 390</td> <td class="nbHitsCovered"> 14</td> <td class="src"><pre class="src"> sb.append(temp);</pre></td></tr>
|
|
<tr> <td class="numLine"> 391</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 392</td> <td class="nbHitsCovered"> 198</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 393</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 394</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> sb.append(<span class="string">" ) "</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 395</td> <td class="nbHitsCovered"> 44</td> <td class="src"><pre class="src"> <span class="keyword">return</span> <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 396</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 397</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 398</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 399</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Removes characters from the input text that are not used within the CPE</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 400</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * index.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 401</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 402</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param text is the text to remove the characters from.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 403</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the text having removed some characters.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 404</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 405</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> String cleanseText(String text) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 406</td> <td class="nbHitsCovered"> 504</td> <td class="src"><pre class="src"> <span class="keyword">return</span> text.replaceAll(CLEANSE_CHARACTER_RX, <span class="string">" "</span>);</pre></td></tr>
|
|
<tr> <td class="numLine"> 407</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 408</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 409</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 410</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Compares two strings after lower casing them and removing the non-alpha</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 411</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * characters.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 412</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 413</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param l string one to compare.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 414</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param r string two to compare.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 415</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return whether or not the two strings are similar.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 416</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 417</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> equalsIgnoreCaseAndNonAlpha(String l, String r) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 418</td> <td class="nbHitsUncovered"><a title="Line 418: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> 460</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 418: Conditional coverage 50% (2/4) [each condition: 50%, 50%]."> <span class="keyword">if</span> (l == <span class="keyword">null</span> || r == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 419</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 420</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 421</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 422</td> <td class="nbHitsCovered"> 460</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String left = l.replaceAll(CLEANSE_NONALPHA_RX, <span class="string">""</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 423</td> <td class="nbHitsCovered"> 460</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String right = r.replaceAll(CLEANSE_NONALPHA_RX, <span class="string">""</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 424</td> <td class="nbHitsCovered"> 460</td> <td class="src"><pre class="src"> <span class="keyword">return</span> left.equalsIgnoreCase(right);</pre></td></tr>
|
|
<tr> <td class="numLine"> 425</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 426</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 427</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 428</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Ensures that the CPE Identified matches the dependency. This validates</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 429</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * that the product, vendor, and version information for the CPE are</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 430</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * contained within the dependencies evidence.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 431</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 432</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param entry a CPE entry.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 433</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param dependency the dependency that the CPE entries could be for.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 434</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return whether or not the entry is valid.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 435</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 436</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> verifyEntry(<span class="keyword">final</span> IndexEntry entry, <span class="keyword">final</span> Dependency dependency) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 437</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> isValid = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 438</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 439</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//TODO - does this nullify some of the fuzzy matching that happens in the lucene search?</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 440</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// for instance CPE some-component and in the evidence we have SomeComponent.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 441</td> <td class="nbHitsCovered"><a title="Line 441: Conditional coverage 100% (2/2)."> 90</a></td> <td class="src"><pre class="src"> <a title="Line 441: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (collectionContainsString(dependency.getProductEvidence(), entry.getProduct())</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 442</td> <td class="nbHitsCovered"><a title="Line 442: Conditional coverage 100% (2/2)."> 8</a></td> <td class="src"><pre class="src"> <a title="Line 442: Conditional coverage 100% (2/2)."> && collectionContainsString(dependency.getVendorEvidence(), entry.getVendor())) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 443</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//&& collectionContainsVersion(dependency.getVersionEvidence(), entry.getVersion())</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 444</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> isValid = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 445</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 446</td> <td class="nbHitsCovered"> 90</td> <td class="src"><pre class="src"> <span class="keyword">return</span> isValid;</pre></td></tr>
|
|
<tr> <td class="numLine"> 447</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 448</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 449</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 450</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Used to determine if the EvidenceCollection contains a specific string.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 451</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 452</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param ec an EvidenceCollection</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 453</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param text the text to search for</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 454</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return whether or not the EvidenceCollection contains the string</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 455</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 456</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">boolean</span> collectionContainsString(EvidenceCollection ec, String text) {</pre></td></tr>
|
|
<tr> <td class="numLine"> 457</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//TODO - likely need to change the split... not sure if this will work for CPE with special chars</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 458</td> <td class="nbHitsUncovered"><a title="Line 458: Conditional coverage 50% (1/2)."> 98</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 458: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (text == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 459</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 460</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 461</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String[] words = text.split(<span class="string">"[\\s_-]"</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 462</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> <span class="keyword">final</span> List<String> list = <span class="keyword">new</span> ArrayList<String>();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 463</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> String tempWord = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 464</td> <td class="nbHitsCovered"><a title="Line 464: Conditional coverage 100% (2/2)."> 286</a></td> <td class="src"><pre class="src"> <a title="Line 464: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String word : words) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 465</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/*</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 466</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> single letter words should be concatenated with the next word.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 467</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> so { "m", "core", "sample" } -> { "mcore", "sample" }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 468</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 469</td> <td class="nbHitsCovered"><a title="Line 469: Conditional coverage 100% (2/2)."> 188</a></td> <td class="src"><pre class="src"> <a title="Line 469: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tempWord != <span class="keyword">null</span>) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 470</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> list.add(tempWord + word);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 471</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> tempWord = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 472</td> <td class="nbHitsCovered"><a title="Line 472: Conditional coverage 100% (2/2)."> 182</a></td> <td class="src"><pre class="src"> <a title="Line 472: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (word.length() <= 2) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 473</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> tempWord = word;</pre></td></tr>
|
|
<tr> <td class="numLine"> 474</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 475</td> <td class="nbHitsCovered"> 174</td> <td class="src"><pre class="src"> list.add(word);</pre></td></tr>
|
|
<tr> <td class="numLine"> 476</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 477</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 478</td> <td class="nbHitsCovered"><a title="Line 478: Conditional coverage 100% (2/2)."> 98</a></td> <td class="src"><pre class="src"> <a title="Line 478: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (tempWord != <span class="keyword">null</span>) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 479</td> <td class="nbHitsUncovered"><a title="Line 479: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 479: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (!list.isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 480</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String tmp = list.get(list.size() - 1) + tempWord;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 481</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> list.add(tmp);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 482</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 483</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> list.add(tempWord);</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 484</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 485</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 486</td> <td class="nbHitsUncovered"><a title="Line 486: Conditional coverage 50% (1/2)."> 98</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 486: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (list.isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 487</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 488</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 489</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> contains = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 490</td> <td class="nbHitsCovered"><a title="Line 490: Conditional coverage 100% (2/2)."> 98</a></td> <td class="src"><pre class="src"> <a title="Line 490: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (String word : list) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 491</td> <td class="nbHitsCovered"> 182</td> <td class="src"><pre class="src"> contains &= ec.containsUsedString(word);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 492</td> <td class="nbHitsCovered"> 182</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 493</td> <td class="nbHitsCovered"> 98</td> <td class="src"><pre class="src"> <span class="keyword">return</span> contains;</pre></td></tr>
|
|
<tr> <td class="numLine"> 494</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 495</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 496</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 497</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Analyzes a dependency and attempts to determine if there are any CPE</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 498</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * identifiers for this dependency.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 499</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 500</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param dependency The Dependency to analyze.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 501</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param engine The analysis engine</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 502</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws AnalysisException is thrown if there is an issue analyzing the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 503</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * dependency.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 504</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 505</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 506</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">synchronized</span> <span class="keyword">void</span> analyze(Dependency dependency, Engine engine) <span class="keyword">throws</span> AnalysisException {</pre></td></tr>
|
|
<tr> <td class="numLine"> 507</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">try</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 508</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> determineCPE(dependency);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 509</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (CorruptIndexException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 510</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AnalysisException(<span class="string">"CPE Index is corrupt."</span>, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 511</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (IOException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 512</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AnalysisException(<span class="string">"Failure opening the CPE Index."</span>, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 513</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> } <span class="keyword">catch</span> (ParseException ex) {</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 514</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">throw</span> <span class="keyword">new</span> AnalysisException(<span class="string">"Unable to parse the generated Lucene query for this dependency."</span>, ex);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 515</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 516</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 517</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 518</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 519</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Retrieves a list of CPE values from the CveDB based on the vendor and</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 520</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * product passed in. The list is then validated to find only CPEs that are</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 521</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * valid for the given dependency. It is possible that the CPE identified is</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 522</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * a best effort "guess" based on the vendor, product, and version</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 523</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * information.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 524</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 525</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param dependency the Dependency being analyzed</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 526</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param vendor the vendor for the CPE being analyzed</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 527</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param product the product for the CPE being analyzed</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 528</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param currentConfidence the current confidence being used during</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 529</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * analysis</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 530</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return <code>true</code> if an identifier was added to the dependency;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 531</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * otherwise <code>false</code></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 532</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @throws UnsupportedEncodingException is thrown if UTF-8 is not supported</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 533</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 534</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">protected</span> <span class="keyword">boolean</span> determineIdentifiers(Dependency dependency, String vendor, String product,</pre></td></tr>
|
|
<tr> <td class="numLine"> 535</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> Confidence currentConfidence) <span class="keyword">throws</span> UnsupportedEncodingException {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 536</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> Set<VulnerableSoftware> cpes = cve.getCPEs(vendor, product);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 537</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> DependencyVersion bestGuess = <span class="keyword">new</span> DependencyVersion(<span class="string">"-"</span>);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 538</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Confidence bestGuessConf = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 539</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> hasBroadMatch = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 540</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> List<IdentifierMatch> collected = <span class="keyword">new</span> ArrayList<IdentifierMatch>();</pre></td></tr>
|
|
<tr> <td class="numLine"> 541</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 542</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//TODO the following algorithm incorrectly identifies things as a lower version</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 543</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// if there lower confidence evidence when the current (highest) version number </span></pre></td></tr>
|
|
<tr> <td class="numLine"> 544</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">// is newer then anything in the NVD.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 545</td> <td class="nbHitsCovered"><a title="Line 545: Conditional coverage 100% (2/2)."> 30</a></td> <td class="src"><pre class="src"> <a title="Line 545: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Confidence conf : Confidence.values()) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 546</td> <td class="nbHitsCovered"><a title="Line 546: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 546: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (Evidence evidence : dependency.getVersionEvidence().iterator(conf)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 547</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">final</span> DependencyVersion evVer = DependencyVersionUtil.parseVersion(evidence.getValue());</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 548</td> <td class="nbHitsUncovered"><a title="Line 548: Conditional coverage 50% (1/2)."> 24</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 548: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (evVer == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 549</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">continue</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 550</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 551</td> <td class="nbHitsCovered"><a title="Line 551: Conditional coverage 100% (2/2)."> 24</a></td> <td class="src"><pre class="src"> <a title="Line 551: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (VulnerableSoftware vs : cpes) {</a></pre></td></tr>
|
|
<tr> <td class="numLine"> 552</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> DependencyVersion dbVer;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 553</td> <td class="nbHitsUncovered"><a title="Line 553: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 872</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 553: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (vs.getUpdate() != <span class="keyword">null</span> && !vs.getUpdate().isEmpty()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 554</td> <td class="nbHitsCovered"> 256</td> <td class="src"><pre class="src"> dbVer = DependencyVersionUtil.parseVersion(vs.getVersion() + <span class="string">'.'</span> + vs.getUpdate());</pre></td></tr>
|
|
<tr> <td class="numLine"> 555</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 556</td> <td class="nbHitsCovered"> 616</td> <td class="src"><pre class="src"> dbVer = DependencyVersionUtil.parseVersion(vs.getVersion());</pre></td></tr>
|
|
<tr> <td class="numLine"> 557</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 558</td> <td class="nbHitsUncovered"><a title="Line 558: Conditional coverage 50% (1/2)."> 872</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 558: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (dbVer == <span class="keyword">null</span>) { <span class="comment">//special case, no version specified - everything is vulnerable</span></a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 559</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> hasBroadMatch = <span class="keyword">true</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 560</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String url = String.format(NVD_SEARCH_URL, URLEncoder.encode(vs.getName(), <span class="string">"UTF-8"</span>));</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 561</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> IdentifierMatch match = <span class="keyword">new</span> IdentifierMatch(<span class="string">"cpe"</span>, vs.getName(), url, IdentifierConfidence.BROAD_MATCH, conf);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 562</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> collected.add(match);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 563</td> <td class="nbHitsUncovered"><a title="Line 563: Conditional coverage 100% (2/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 563: Conditional coverage 100% (2/2)."> } <span class="keyword">else</span> <span class="keyword">if</span> (evVer.equals(dbVer)) { <span class="comment">//yeah! exact match</span></a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 564</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String url = String.format(NVD_SEARCH_URL, URLEncoder.encode(vs.getName(), <span class="string">"UTF-8"</span>));</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 565</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">final</span> IdentifierMatch match = <span class="keyword">new</span> IdentifierMatch(<span class="string">"cpe"</span>, vs.getName(), url, IdentifierConfidence.EXACT_MATCH, conf);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 566</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> collected.add(match);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 567</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> } <span class="keyword">else</span> <span class="comment">//TODO the following isn't quite right is it? need to think about this guessing game a bit more.</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 568</td> <td class="nbHitsCovered"><a title="Line 568: Conditional coverage 100% (2/2)."> 856</a></td> <td class="src"><pre class="src"> <a title="Line 568: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (evVer.getVersionParts().size() <= dbVer.getVersionParts().size()</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 569</td> <td class="nbHitsCovered"><a title="Line 569: Conditional coverage 100% (2/2)."> 840</a></td> <td class="src"><pre class="src"> <a title="Line 569: Conditional coverage 100% (2/2)."> && evVer.matchesAtLeastThreeLevels(dbVer)) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 570</td> <td class="nbHitsUncovered"><a title="Line 570: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 128</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 570: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (bestGuessConf == <span class="keyword">null</span> || bestGuessConf.compareTo(conf) > 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 571</td> <td class="nbHitsUncovered"><a title="Line 571: Conditional coverage 50% (1/2)."> 4</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 571: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (bestGuess.getVersionParts().size() < dbVer.getVersionParts().size()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 572</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> bestGuess = dbVer;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 573</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> bestGuessConf = conf;</pre></td></tr>
|
|
<tr> <td class="numLine"> 574</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 575</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 576</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 577</td> <td class="nbHitsCovered"> 872</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 578</td> <td class="nbHitsUncovered"><a title="Line 578: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> 24</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 578: Conditional coverage 75% (3/4) [each condition: 100%, 50%]."> <span class="keyword">if</span> (bestGuessConf == <span class="keyword">null</span> || bestGuessConf.compareTo(conf) > 0) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 579</td> <td class="nbHitsUncovered"><a title="Line 579: Conditional coverage 50% (1/2)."> 2</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 579: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (bestGuess.getVersionParts().size() < evVer.getVersionParts().size()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 580</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> bestGuess = evVer;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 581</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> bestGuessConf = conf;</pre></td></tr>
|
|
<tr> <td class="numLine"> 582</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 583</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 584</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 585</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 586</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> String cpeName = String.format(<span class="string">"cpe:/a:%s:%s:%s"</span>, vendor, product, bestGuess.toString());</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 587</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> String url = <span class="keyword">null</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 588</td> <td class="nbHitsUncovered"><a title="Line 588: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 588: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (hasBroadMatch) { <span class="comment">//if we have a broad match we can add the URL to the best guess.</span></a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 589</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> String cpeUrlName = String.format(<span class="string">"cpe:/a:%s:%s"</span>, vendor, product);</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 590</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> url = String.format(NVD_SEARCH_URL, URLEncoder.encode(cpeUrlName, <span class="string">"UTF-8"</span>));</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 591</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 592</td> <td class="nbHitsUncovered"><a title="Line 592: Conditional coverage 50% (1/2)."> 6</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 592: Conditional coverage 50% (1/2)."> <span class="keyword">if</span> (bestGuessConf == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 593</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> bestGuessConf = Confidence.LOW;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 594</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 595</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> IdentifierMatch match = <span class="keyword">new</span> IdentifierMatch(<span class="string">"cpe"</span>, cpeName, url, IdentifierConfidence.BEST_GUESS, bestGuessConf);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 596</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> collected.add(match);</pre></td></tr>
|
|
<tr> <td class="numLine"> 597</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLineCover"> 598</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> Collections.sort(collected);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 599</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> IdentifierConfidence bestIdentifierQuality = collected.get(0).getConfidence();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 600</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> Confidence bestEvidenceQuality = collected.get(0).getEvidenceConfidence();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 601</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">boolean</span> identifierAdded = <span class="keyword">false</span>;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 602</td> <td class="nbHitsCovered"><a title="Line 602: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 602: Conditional coverage 100% (2/2)."> <span class="keyword">for</span> (IdentifierMatch m : collected) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 603</td> <td class="nbHitsCovered"><a title="Line 603: Conditional coverage 100% (2/2)."> 22</a></td> <td class="src"><pre class="src"> <a title="Line 603: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bestIdentifierQuality.equals(m.getConfidence())</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 604</td> <td class="nbHitsCovered"><a title="Line 604: Conditional coverage 100% (2/2)."> 18</a></td> <td class="src"><pre class="src"> <a title="Line 604: Conditional coverage 100% (2/2)."> && bestEvidenceQuality.equals(m.getEvidenceConfidence())) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 605</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">final</span> Identifier i = m.getIdentifier();</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 606</td> <td class="nbHitsCovered"><a title="Line 606: Conditional coverage 100% (2/2)."> 6</a></td> <td class="src"><pre class="src"> <a title="Line 606: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (bestIdentifierQuality == IdentifierConfidence.BEST_GUESS) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 607</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> i.setConfidence(Confidence.LOW);</pre></td></tr>
|
|
<tr> <td class="numLine"> 608</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> } <span class="keyword">else</span> {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 609</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> i.setConfidence(bestEvidenceQuality);</pre></td></tr>
|
|
<tr> <td class="numLine"> 610</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 611</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> dependency.addIdentifier(i);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 612</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> identifierAdded = <span class="keyword">true</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 613</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 614</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 615</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> identifierAdded;</pre></td></tr>
|
|
<tr> <td class="numLine"> 616</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 617</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 618</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 619</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The confidence whether the identifier is an exact match, or a best guess.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 620</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 621</td> <td class="nbHitsCovered"> 8</td> <td class="src"><pre class="src"> <span class="keyword">private</span> enum IdentifierConfidence {</pre></td></tr>
|
|
<tr> <td class="numLine"> 622</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 623</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 624</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * An exact match for the CPE.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 625</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 626</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> EXACT_MATCH,</pre></td></tr>
|
|
<tr> <td class="numLine"> 627</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 628</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A best guess for the CPE.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 629</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 630</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> BEST_GUESS,</pre></td></tr>
|
|
<tr> <td class="numLine"> 631</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 632</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The entire vendor/product group must be added (without a guess at</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 633</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * version) because there is a CVE with a VS that only specifies</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 634</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * vendor/product.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 635</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 636</td> <td class="nbHitsCovered"> 2</td> <td class="src"><pre class="src"> BROAD_MATCH</pre></td></tr>
|
|
<tr> <td class="numLine"> 637</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 638</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 639</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 640</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * A simple object to hold an identifier and carry information about the</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 641</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * confidence in the identifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 642</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 643</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">private</span> <span class="keyword">static</span> <span class="keyword">class</span> IdentifierMatch <span class="keyword">implements</span> Comparable<IdentifierMatch> {</pre></td></tr>
|
|
<tr> <td class="numLine"> 644</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 645</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 646</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Constructs an IdentifierMatch.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 647</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 648</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param type the type of identifier (such as CPE)</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 649</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param value the value of the identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 650</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param url the URL of the identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 651</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param identifierConfidence the confidence in the identifier: best</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 652</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * guess or exact match</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 653</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param evidenceConfidence the confidence of the evidence used to find</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 654</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * the identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 655</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 656</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> IdentifierMatch(String type, String value, String url, IdentifierConfidence identifierConfidence, Confidence evidenceConfidence) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 657</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.identifier = <span class="keyword">new</span> Identifier(type, value, url);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 658</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.confidence = identifierConfidence;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 659</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> <span class="keyword">this</span>.evidenceConfidence = evidenceConfidence;</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 660</td> <td class="nbHitsCovered"> 22</td> <td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 661</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//<editor-fold defaultstate="collapsed" desc="Property implementations: evidenceConfidence, confidence, identifier"></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 662</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 663</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The confidence in the evidence used to identify this match.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 664</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 665</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> Confidence evidenceConfidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 666</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 667</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 668</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Get the value of evidenceConfidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 669</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 670</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the value of evidenceConfidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 671</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 672</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> Confidence getEvidenceConfidence() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 673</td> <td class="nbHitsCovered"> 24</td> <td class="src"><pre class="src"> <span class="keyword">return</span> evidenceConfidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 674</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 675</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 676</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 677</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Set the value of evidenceConfidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 678</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 679</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param evidenceConfidence new value of evidenceConfidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 680</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 681</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setEvidenceConfidence(Confidence evidenceConfidence) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 682</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.evidenceConfidence = evidenceConfidence;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 683</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 684</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 685</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The confidence whether this is an exact match, or a best guess.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 686</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 687</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> IdentifierConfidence confidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 688</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 689</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 690</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Get the value of confidence.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 691</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 692</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the value of confidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 693</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 694</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> IdentifierConfidence getConfidence() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 695</td> <td class="nbHitsCovered"> 28</td> <td class="src"><pre class="src"> <span class="keyword">return</span> confidence;</pre></td></tr>
|
|
<tr> <td class="numLine"> 696</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 697</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 698</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 699</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Set the value of confidence.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 700</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 701</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param confidence new value of confidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 702</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 703</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setConfidence(IdentifierConfidence confidence) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 704</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.confidence = confidence;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 705</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 706</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 707</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * The CPE identifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 708</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 709</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">private</span> Identifier identifier;</pre></td></tr>
|
|
<tr> <td class="numLine"> 710</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 711</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 712</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Get the value of identifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 713</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 714</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the value of identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 715</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 716</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> Identifier getIdentifier() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 717</td> <td class="nbHitsCovered"> 6</td> <td class="src"><pre class="src"> <span class="keyword">return</span> identifier;</pre></td></tr>
|
|
<tr> <td class="numLine"> 718</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 719</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 720</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 721</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Set the value of identifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 722</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 723</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param identifier new value of identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 724</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 725</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">void</span> setIdentifier(Identifier identifier) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 726</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">this</span>.identifier = identifier;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 727</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> }</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 728</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//</editor-fold></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 729</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//<editor-fold defaultstate="collapsed" desc="Standard implementations of toString, hashCode, and equals"></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 730</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 731</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 732</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Standard toString() implementation.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 733</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 734</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the string representation of the object</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 735</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 736</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 737</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> String toString() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 738</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="string">"IdentifierMatch{"</span> + <span class="string">"evidenceConfidence="</span> + evidenceConfidence</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 739</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> + <span class="string">", confidence="</span> + confidence + <span class="string">", identifier="</span> + identifier + <span class="string">'}'</span>;</pre></td></tr>
|
|
<tr> <td class="numLine"> 740</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 741</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 742</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 743</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Standard hashCode() implementation.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 744</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 745</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the hashCode</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 746</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 747</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 748</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> hashCode() {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 749</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">int</span> hash = 5;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 750</td> <td class="nbHitsUncovered"><a title="Line 750: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 750: Conditional coverage 0% (0/2)."> hash = 97 * hash + (<span class="keyword">this</span>.evidenceConfidence != <span class="keyword">null</span> ? <span class="keyword">this</span>.evidenceConfidence.hashCode() : 0);</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 751</td> <td class="nbHitsUncovered"><a title="Line 751: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 751: Conditional coverage 0% (0/2)."> hash = 97 * hash + (<span class="keyword">this</span>.confidence != <span class="keyword">null</span> ? <span class="keyword">this</span>.confidence.hashCode() : 0);</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 752</td> <td class="nbHitsUncovered"><a title="Line 752: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 752: Conditional coverage 0% (0/2)."> hash = 97 * hash + (<span class="keyword">this</span>.identifier != <span class="keyword">null</span> ? <span class="keyword">this</span>.identifier.hashCode() : 0);</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 753</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> hash;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 754</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 755</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 756</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 757</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Standard equals implementation.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 758</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 759</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param obj the object to compare</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 760</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return true if the objects are equal, otherwise false</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 761</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 762</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 763</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">boolean</span> equals(Object obj) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 764</td> <td class="nbHitsUncovered"><a title="Line 764: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 764: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (obj == <span class="keyword">null</span>) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 765</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 766</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 767</td> <td class="nbHitsUncovered"><a title="Line 767: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 767: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (getClass() != obj.getClass()) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 768</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 769</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 770</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">final</span> IdentifierMatch other = (IdentifierMatch) obj;</span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 771</td> <td class="nbHitsUncovered"><a title="Line 771: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 771: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.evidenceConfidence != other.evidenceConfidence) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 772</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 773</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 774</td> <td class="nbHitsUncovered"><a title="Line 774: Conditional coverage 0% (0/2)."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 774: Conditional coverage 0% (0/2)."> <span class="keyword">if</span> (<span class="keyword">this</span>.confidence != other.confidence) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 775</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 776</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 777</td> <td class="nbHitsUncovered"><a title="Line 777: Conditional coverage 0% (0/6) [each condition: 0%, 0%, 0%]."> 0</a></td> <td class="src"><pre class="src"><span class="srcUncovered"> <a title="Line 777: Conditional coverage 0% (0/6) [each condition: 0%, 0%, 0%]."> <span class="keyword">if</span> (<span class="keyword">this</span>.identifier != other.identifier && (<span class="keyword">this</span>.identifier == <span class="keyword">null</span> || !<span class="keyword">this</span>.identifier.equals(other.identifier))) {</a></span></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 778</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">false</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 779</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 780</td> <td class="nbHitsUncovered"> 0</td> <td class="src"><pre class="src"><span class="srcUncovered"> <span class="keyword">return</span> <span class="keyword">true</span>;</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 781</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 782</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">//</editor-fold></span></pre></td></tr>
|
|
<tr> <td class="numLine"> 783</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> </pre></td></tr>
|
|
<tr> <td class="numLine"> 784</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment">/**</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 785</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * Standard implementation of compareTo that compares identifier</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 786</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * confidence, evidence confidence, and then the identifier.</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 787</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> *</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 788</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @param o the IdentifierMatch to compare to</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 789</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> * @return the natural ordering of IdentifierMatch</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 790</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="comment"> */</span></pre></td></tr>
|
|
<tr> <td class="numLine"> 791</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> @Override</pre></td></tr>
|
|
<tr> <td class="numLine"> 792</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> <span class="keyword">public</span> <span class="keyword">int</span> compareTo(IdentifierMatch o) {</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 793</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">int</span> conf = <span class="keyword">this</span>.confidence.compareTo(o.confidence);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 794</td> <td class="nbHitsCovered"><a title="Line 794: Conditional coverage 100% (2/2)."> 16</a></td> <td class="src"><pre class="src"> <a title="Line 794: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (conf == 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 795</td> <td class="nbHitsCovered"> 12</td> <td class="src"><pre class="src"> conf = <span class="keyword">this</span>.evidenceConfidence.compareTo(o.evidenceConfidence);</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 796</td> <td class="nbHitsCovered"><a title="Line 796: Conditional coverage 100% (2/2)."> 12</a></td> <td class="src"><pre class="src"> <a title="Line 796: Conditional coverage 100% (2/2)."> <span class="keyword">if</span> (conf == 0) {</a></pre></td></tr>
|
|
<tr> <td class="numLineCover"> 797</td> <td class="nbHitsCovered"> 4</td> <td class="src"><pre class="src"> conf = identifier.compareTo(o.identifier);</pre></td></tr>
|
|
<tr> <td class="numLine"> 798</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 799</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLineCover"> 800</td> <td class="nbHitsCovered"> 16</td> <td class="src"><pre class="src"> <span class="keyword">return</span> conf;</pre></td></tr>
|
|
<tr> <td class="numLine"> 801</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 802</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
<tr> <td class="numLine"> 803</td> <td class="nbHits"> </td>
|
|
<td class="src"><pre class="src"> }</pre></td></tr>
|
|
</table>
|
|
|
|
<div class="footer">Report generated by <a href="http://cobertura.sourceforge.net/" target="_top">Cobertura</a> 2.1.1 on 6/16/16 6:46 AM.</div>
|
|
</body>
|
|
</html>
|