Skip to content

Commit 7adbcc6

Browse files
authored
Merge pull request #48 from homoluctus/fix/cve_references
Fix an error that cve.References is not iterable
2 parents 8201c11 + 7b569b6 commit 7adbcc6

File tree

4 files changed

+69
-33
lines changed

4 files changed

+69
-33
lines changed

__tests__/utils.test.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { isIterable } from '../src/utils';
2+
3+
describe('isIterable', () => {
4+
test.each([
5+
['test', true],
6+
[[], true],
7+
[['this', 'is', 'test'], true],
8+
[{ id: 'test' }, false],
9+
])('input %s', (obj, expected) => {
10+
expect(isIterable(obj)).toBe(expected);
11+
});
12+
});

dist/index.js

+50-32
Original file line numberDiff line numberDiff line change
@@ -3427,41 +3427,15 @@ const create = (opt, files) => {
34273427
/***/ }),
34283428

34293429
/***/ 163:
3430-
/***/ (function(__unusedmodule, exports, __webpack_require__) {
3430+
/***/ (function(__unusedmodule, exports) {
34313431

34323432
"use strict";
34333433

3434-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3435-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3436-
return new (P || (P = Promise))(function (resolve, reject) {
3437-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
3438-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
3439-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
3440-
step((generator = generator.apply(thisArg, _arguments || [])).next());
3441-
});
3442-
};
3443-
var __importStar = (this && this.__importStar) || function (mod) {
3444-
if (mod && mod.__esModule) return mod;
3445-
var result = {};
3446-
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
3447-
result["default"] = mod;
3448-
return result;
3449-
};
34503434
Object.defineProperty(exports, "__esModule", { value: true });
3451-
const rest_1 = __webpack_require__(0);
3452-
const github = __importStar(__webpack_require__(469));
3453-
function createIssue(token, options) {
3454-
return __awaiter(this, void 0, void 0, function* () {
3455-
const client = new rest_1.Octokit({ auth: token });
3456-
const { data: issue, } = yield client.issues.create(Object.assign(Object.assign({}, github.context.repo), options));
3457-
const result = {
3458-
issueNumber: issue.number,
3459-
htmlUrl: issue.html_url,
3460-
};
3461-
return result;
3462-
});
3435+
function isIterable(obj) {
3436+
return obj != null && typeof obj[Symbol.iterator] === 'function';
34633437
}
3464-
exports.createIssue = createIssue;
3438+
exports.isIterable = isIterable;
34653439

34663440

34673441
/***/ }),
@@ -7116,7 +7090,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
71167090
Object.defineProperty(exports, "__esModule", { value: true });
71177091
const core = __importStar(__webpack_require__(470));
71187092
const trivy_1 = __webpack_require__(737);
7119-
const issue_1 = __webpack_require__(163);
7093+
const issue_1 = __webpack_require__(486);
71207094
function run() {
71217095
return __awaiter(this, void 0, void 0, function* () {
71227096
try {
@@ -10495,6 +10469,46 @@ module.exports = {
1049510469
}
1049610470

1049710471

10472+
/***/ }),
10473+
10474+
/***/ 486:
10475+
/***/ (function(__unusedmodule, exports, __webpack_require__) {
10476+
10477+
"use strict";
10478+
10479+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
10480+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
10481+
return new (P || (P = Promise))(function (resolve, reject) {
10482+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
10483+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
10484+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
10485+
step((generator = generator.apply(thisArg, _arguments || [])).next());
10486+
});
10487+
};
10488+
var __importStar = (this && this.__importStar) || function (mod) {
10489+
if (mod && mod.__esModule) return mod;
10490+
var result = {};
10491+
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
10492+
result["default"] = mod;
10493+
return result;
10494+
};
10495+
Object.defineProperty(exports, "__esModule", { value: true });
10496+
const rest_1 = __webpack_require__(0);
10497+
const github = __importStar(__webpack_require__(469));
10498+
function createIssue(token, options) {
10499+
return __awaiter(this, void 0, void 0, function* () {
10500+
const client = new rest_1.Octokit({ auth: token });
10501+
const { data: issue, } = yield client.issues.create(Object.assign(Object.assign({}, github.context.repo), options));
10502+
const result = {
10503+
issueNumber: issue.number,
10504+
htmlUrl: issue.html_url,
10505+
};
10506+
return result;
10507+
});
10508+
}
10509+
exports.createIssue = createIssue;
10510+
10511+
1049810512
/***/ }),
1049910513

1050010514
/***/ 489:
@@ -13706,6 +13720,7 @@ const tar_1 = __importDefault(__webpack_require__(885));
1370613720
const rest_1 = __webpack_require__(0);
1370713721
const node_fetch_1 = __importDefault(__webpack_require__(454));
1370813722
const child_process_1 = __webpack_require__(129);
13723+
const utils_1 = __webpack_require__(163);
1370913724
class Downloader {
1371013725
constructor() {
1371113726
this.githubClient = new rest_1.Octokit();
@@ -13846,7 +13861,10 @@ class Trivy {
1384613861
vulnTable += `|${cve.VulnerabilityID || 'N/A'}|${cve.PkgName || 'N/A'}`;
1384713862
vulnTable += `|${cve.InstalledVersion || 'N/A'}|${cve.FixedVersion ||
1384813863
'N/A'}|`;
13849-
for (const reference of cve.References) {
13864+
const references = cve.References;
13865+
if (!utils_1.isIterable(references))
13866+
continue;
13867+
for (const reference of references) {
1385013868
vulnTable += `${reference || 'N/A'}<br>`;
1385113869
}
1385213870
vulnTable.replace(/<br>$/, '|\n');

src/trivy.ts

+4-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import fetch, { Response } from 'node-fetch';
66
import { spawnSync, SpawnSyncReturns } from 'child_process';
77

88
import { TrivyOption, Vulnerability } from './interface';
9+
import { isIterable } from './utils';
910

1011
export class Downloader {
1112
githubClient: Octokit;
@@ -180,7 +181,9 @@ export class Trivy {
180181
vulnTable += `|${cve.InstalledVersion || 'N/A'}|${cve.FixedVersion ||
181182
'N/A'}|`;
182183

183-
for (const reference of cve.References) {
184+
const references = cve.References;
185+
if (!isIterable(references)) continue;
186+
for (const reference of references) {
184187
vulnTable += `${reference || 'N/A'}<br>`;
185188
}
186189

src/utils.ts

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
export function isIterable(obj: Object): Boolean {
2+
return obj != null && typeof obj[Symbol.iterator] === 'function';
3+
}

0 commit comments

Comments
 (0)