| <?php | |
| /** | |
| * Copyright (c) 2011 Eclipse Foundation and others. | |
| * | |
| * This program and the accompanying materials are made | |
| * available under the terms of the Eclipse Public License 2.0 | |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ | |
| * | |
| * SPDX-License-Identifier: EPL-2.0 | |
| */ | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/database.inc"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/common.php"); | |
| require_once($_SERVER['DOCUMENT_ROOT'] . "/projects/classes/debug.php"); | |
| class Bug { | |
| var $bug_id; | |
| var $title; | |
| var $product; | |
| var $component; | |
| var $target_milestone; | |
| function getId() { | |
| return $this->bug_id; | |
| } | |
| function getTitle() { | |
| return $this->title; | |
| } | |
| function getProduct() { | |
| return $this->product; | |
| } | |
| function getComponent() { | |
| return $this->component; | |
| } | |
| function getTargetMilestone() { | |
| return $this->target_milestone; | |
| } | |
| function getLink() { | |
| return "https://bugs.eclipse.org/$this->bug_id"; | |
| } | |
| function getAliases() { | |
| return $this->aliases; | |
| } | |
| function getCVE() { | |
| foreach($this->getAliases() as $alias) { | |
| if (preg_match('/^CVE-\d{4}-\d{4,7}$/', $alias)) { | |
| return $alias; | |
| } | |
| } | |
| return null; | |
| } | |
| function asHtml() { | |
| $text = "<a href=\"{$this->getLink()}\">{$this->getId()}</a> {$this->getProduct()}: {$this->getTitle()}"; | |
| if ($milestone = $this->getTargetMilestone()) { | |
| $text = "{$text} ({$milestone})"; | |
| } | |
| return $text; | |
| } | |
| } | |
| /** | |
| * This function returns an array containing Bug instances representing | |
| * bugs that have been flagged as resolutions to 'security' issues. | |
| * | |
| * @return Bug[] | |
| */ | |
| function findResolvedSecurityBugs() { | |
| $sql = "select | |
| b.bug_id as bug_id, | |
| p.name as product, | |
| c.name as component, | |
| group_concat(ba.alias separator '!!!' ) as aliases, | |
| b.short_desc as title, | |
| b.target_milestone as target_milestone | |
| from bugs as b | |
| left join bugs_aliases as ba on (b.bug_id=ba.bug_id) | |
| join products as p on (b.product_id=p.id) | |
| join components as c on (b.component_id = c.id) | |
| join keywords as k on (b.bug_id=k.bug_id) | |
| join keyworddefs as kd on (k.keywordid=kd.id) | |
| where | |
| b.bug_id not in (select bg.bug_id from bug_group_map as bg join groups as g on (bg.group_id=g.id and g.name = 'Security_Advisories')) | |
| and kd.name='security' | |
| and b.bug_status IN ( 'RESOLVED', 'VERIFIED', 'CLOSED' ) | |
| and b.resolution IN ( 'FIXED' ) | |
| group by b.bug_id"; | |
| $bugs = array(); | |
| query('bugzilla', $sql, array(), function($row) use (&$bugs) { | |
| $bug = new Bug(); | |
| $bug->bug_id = $row['bug_id']; | |
| $bug->title = $row['title']; | |
| $bug->product = $row['product']; | |
| $bug->component = $row['component']; | |
| $bug->target_milestone = $row['target_milestone']; | |
| $bug->aliases = $row['aliases'] ? preg_split('/!!!/',$row['aliases']) : array(); | |
| $bugs[] = $bug; | |
| }); | |
| return $bugs; | |
| } | |
| ?> |