2
2
# SPDX-License-Identifier: GPL-3.0-or-later
3
3
4
4
import os
5
+ import re
5
6
import sqlite3
6
7
import sys
7
8
from collections import defaultdict
@@ -72,7 +73,23 @@ def get_cves(self, product_info: ProductInfo, triage_data: TriageData):
72
73
"""
73
74
# Removing * from vendors that are guessed by the package list parser
74
75
vendor = product_info .vendor .replace ("*" , "" )
75
- self .cursor .execute (query , [vendor , product_info .product , product_info .version ])
76
+
77
+ # Need to manipulate version to ensure canonical form of version
78
+ if product_info .product == "openssl" :
79
+ pv = re .search (r"\d[.\d]*[a-z]?" , product_info .version )
80
+ parsed_version_between = parse_version (self .openssl_convert (pv .group (0 )))
81
+ else :
82
+ # Ensure canonical form of version numbering
83
+ if ":" in product_info .version :
84
+ # Handle x:a.b<string> e.g. 2:7.4+23
85
+ components = product_info .version .split (":" )
86
+ pv = re .search (r"\d[.\d]*" , components [1 ])
87
+ else :
88
+ # Handle a.b.c<string> e.g. 1.20.9rel1
89
+ pv = re .search (r"\d[.\d]*" , product_info .version )
90
+ parsed_version = parse_version (pv .group (0 ))
91
+
92
+ self .cursor .execute (query , [vendor , product_info .product , str (parsed_version )])
76
93
77
94
cve_list = list (map (lambda x : x [0 ], self .cursor .fetchall ()))
78
95
@@ -88,8 +105,6 @@ def get_cves(self, product_info: ProductInfo, triage_data: TriageData):
88
105
WHERE vendor=? AND product=? AND version=?
89
106
"""
90
107
91
- # Removing * from vendors that are guessed by the package list parser
92
- vendor = product_info .vendor .replace ("*" , "" )
93
108
self .cursor .execute (query , [vendor , product_info .product , "*" ])
94
109
95
110
for cve_range in self .cursor :
@@ -101,8 +116,6 @@ def get_cves(self, product_info: ProductInfo, triage_data: TriageData):
101
116
version_end_excluding ,
102
117
) = cve_range
103
118
104
- parsed_version = parse_version (product_info .version )
105
-
106
119
# pep-440 doesn't include versions of the type 1.1.0g used by openssl
107
120
# so if this is openssl, convert the last letter to a .number
108
121
if product_info .product == "openssl" :
@@ -112,9 +125,7 @@ def get_cves(self, product_info: ProductInfo, triage_data: TriageData):
112
125
version_start_excluding = self .openssl_convert (version_start_excluding )
113
126
version_end_including = self .openssl_convert (version_end_including )
114
127
version_end_excluding = self .openssl_convert (version_end_excluding )
115
- parsed_version = parse_version (
116
- self .openssl_convert (product_info .version )
117
- )
128
+ parsed_version = parsed_version_between
118
129
119
130
# check the start range
120
131
passes_start = False
0 commit comments