| 97 |
self.register('status/itp', self.page_status_itp) |
self.register('status/itp', self.page_status_itp) |
| 98 |
self.register('data/unknown-packages', self.page_data_unknown_packages) |
self.register('data/unknown-packages', self.page_data_unknown_packages) |
| 99 |
self.register('data/missing-epochs', self.page_data_missing_epochs) |
self.register('data/missing-epochs', self.page_data_missing_epochs) |
| 100 |
|
self.register('data/latently-vulnerable', |
| 101 |
|
self.page_data_latently_vulnerable) |
| 102 |
self.register('data/releases', self.page_data_releases) |
self.register('data/releases', self.page_data_releases) |
| 103 |
self.register('data/funny-versions', self.page_data_funny_versions) |
self.register('data/funny-versions', self.page_data_funny_versions) |
| 104 |
self.register('data/fake-names', self.page_data_fake_names) |
self.register('data/fake-names', self.page_data_fake_names) |
| 140 |
('data/fake-names', 'Tracked issues without a CVE name'), |
('data/fake-names', 'Tracked issues without a CVE name'), |
| 141 |
('data/missing-epochs', |
('data/missing-epochs', |
| 142 |
'Package versions which might lack an epoch'), |
'Package versions which might lack an epoch'), |
| 143 |
|
('data/latently-vulnerable', |
| 144 |
|
'Packages which are latently vulnerable in unstable'), |
| 145 |
('data/funny-versions', |
('data/funny-versions', |
| 146 |
'Packages with strange version numbers'), |
'Packages with strange version numbers'), |
| 147 |
('data/releases', |
('data/releases', |
| 811 |
caption=("Bug", "Package", "Version 1", "Version 2"), |
caption=("Bug", "Package", "Version 1", "Version 2"), |
| 812 |
replacement="No source package version with missing epochs.")]) |
replacement="No source package version with missing epochs.")]) |
| 813 |
|
|
| 814 |
|
def page_data_latently_vulnerable(self, path, params, url): |
| 815 |
|
def gen(): |
| 816 |
|
for pkg, bugs in self.db.cursor().execute( |
| 817 |
|
"""SELECT package, string_set(bug_name) |
| 818 |
|
FROM package_notes AS p1 |
| 819 |
|
WHERE release <> '' |
| 820 |
|
AND (bug_name LIKE 'CVE-%' OR bug_name LIKE 'FAKE-%') |
| 821 |
|
AND NOT EXISTS (SELECT 1 FROM package_notes AS p2 |
| 822 |
|
WHERE p2.bug_name = p1.bug_name |
| 823 |
|
AND p2.package = p1.package |
| 824 |
|
AND release = '') |
| 825 |
|
AND EXISTS (SELECT 1 FROM source_packages |
| 826 |
|
WHERE name = p1.package AND release = 'sid') |
| 827 |
|
GROUP BY package |
| 828 |
|
ORDER BY package"""): |
| 829 |
|
pkg = self.make_source_package_ref(url, pkg) |
| 830 |
|
bugs = bugs.split(',') |
| 831 |
|
yield pkg, self.make_xref_list(url, bugs) |
| 832 |
|
|
| 833 |
|
return self.create_page( |
| 834 |
|
url, "Latently vulnerable packages in unstable", |
| 835 |
|
[P( |
| 836 |
|
"""A package is latently vulnerable in unstable if it is vulnerable in |
| 837 |
|
any release, and there is no package note for the same vulnerability |
| 838 |
|
and package in unstable (and the package is still available in |
| 839 |
|
unstable, of course)."""), |
| 840 |
|
make_table(gen(), |
| 841 |
|
caption=("Package", "Bugs"), |
| 842 |
|
replacement="No latently vulnerable packages were found.")]) |
| 843 |
|
|
| 844 |
def page_data_releases(self, path, params, url): |
def page_data_releases(self, path, params, url): |
| 845 |
def gen(): |
def gen(): |
| 846 |
for (rel, subrel, archive, sources, archs) \ |
for (rel, subrel, archive, sources, archs) \ |