A recent post by Abbe in the Website Feedback forum indicates that the vuxml processing has a bit to be improved.
When I looked, prod differed from beta and dev. This could be as simple as a missed processing of vuln.xml. I re-ran the script, and the marked commits on prod then agreed with dev and beta. This situation reminded me of a past problem we had. I am not sure why this particular problem arose as identified by Abbe, but I am convinced of a new problem.
It’s not so much a new problem. It more like I am newly aware of the problem.
FreshPorts lists the commits which are affected by vulnerabilities. If you look at the commit history for a port, a black skull indicates that that version of the port is vulnerable. This information is stored in the commit_log_ports table, which looks like this:
freshports.org=# \d commit_log_ports_vuxml Table "public.commit_log_ports_vuxml" Column | Type | Modifiers ---------------+---------+--------------------------------------------------------------------- id | integer | not null default nextval('commit_log_ports_vuxml_id_seq'::regclass) commit_log_id | integer | not null port_id | integer | not null vuxml_id | integer | not null Indexes: "commit_log_ports_vuxml_pkey" PRIMARY KEY, btree (id) "commit_log_ports_vuxml_port_id" btree (port_id) "commit_log_ports_vuxml_vuxml_id_idx" btree (vuxml_id) Foreign-key constraints: "$1" FOREIGN KEY (vuxml_id) REFERENCES vuxml(id) ON UPDATE CASCADE ON DELETE CASCADE "$2" FOREIGN KEY (port_id) REFERENCES ports(id) ON UPDATE CASCADE ON DELETE CASCADE "$3" FOREIGN KEY (commit_log_id) REFERENCES commit_log(id) ON UPDATE CASCADE ON DELETE CASCADE freshports.org=#
This table a commit (commit_log_id) to a port which is vulnerable (port_id) and the vulnerability in question (vuxml_id).
In turn, the commit_log_ports table links the commit to the revision of that port, which helps us to compose the port history.
freshports.org=# \d commit_log_ports Table "public.commit_log_ports" Column | Type | Modifiers ---------------+----------+----------- commit_log_id | integer | not null port_id | integer | not null needs_refresh | smallint | not null port_version | text | port_revision | text | port_epoch | text | Indexes: "commit_log_ports_pkey" PRIMARY KEY, btree (commit_log_id, port_id) "commit_log_ports_needs_refresh_idx" btree (needs_refresh) WHERE needs_refresh <> 0 "commit_log_ports_port_id" btree (port_id) "needs_refresh" btree (needs_refresh) Foreign-key constraints: "$1" FOREIGN KEY (commit_log_id) REFERENCES commit_log(id) ON UPDATE CASCADE ON DELETE CASCADE "$2" FOREIGN KEY (port_id) REFERENCES ports(id) ON UPDATE CASCADE ON DELETE CASCADE Triggers: commit_log_ports_insert AFTER INSERT ON commit_log_ports FOR EACH ROW EXECUTE PROCEDURE commit_log_ports_insert() freshports.org=#
If you look at the top of a port page, you will see a black skull if the most recent version of the port is vulnerable. That indication is stored in the ports_vulnerable table:
freshports.org=# \d ports_vulnerable Table "public.ports_vulnerable" Column | Type | Modifiers ---------+---------+-------------------- port_id | integer | not null current | integer | not null default 1 past | integer | not null default 0 Indexes: "ports_vulnerable_pkey" PRIMARY KEY, btree (port_id) Foreign-key constraints: "$1" FOREIGN KEY (port_id) REFERENCES ports(id) ON UPDATE RESTRICT ON DELETE CASCADE Triggers: ports_vulnerable_delete_clear_cache AFTER DELETE ON ports_vulnerable FOR EACH ROW EXECUTE PROCEDURE ports_vulnerable_delete_clear_cache() freshports.org=#
This table indicates whether or not a given port (port_id) has an existing vulnerability (current) or a past vulnerability (past). This indicates whether the port page displays a black skull, or a white skull, respectively.
Fixing the ports_vulnerable table is easy:
freshports.org=# select PortsVulnerabilityCountAdjust(6191); portsvulnerabilitycountadjust ------------------------------- 1 (1 row) freshports.org=# select * from ports_vulnerable where port_id = 6191; port_id | current | past ---------+---------+------ 6191 | 0 | 1 (1 row) freshports.org=# \q