diff --git a/csaf_2_1/recommendedTests.js b/csaf_2_1/recommendedTests.js index 1dfa518e..2d0d83f3 100644 --- a/csaf_2_1/recommendedTests.js +++ b/csaf_2_1/recommendedTests.js @@ -27,3 +27,4 @@ export { recommendedTest_6_2_8 } from './recommendedTests/recommendedTest_6_2_8. export { recommendedTest_6_2_9 } from './recommendedTests/recommendedTest_6_2_9.js' export { recommendedTest_6_2_3 } from './recommendedTests/recommendedTest_6_2_3.js' export { recommendedTest_6_2_22 } from './recommendedTests/recommendedTest_6_2_22.js' +export { recommendedTest_6_2_38 } from './recommendedTests/recommendedTest_6_2_38.js' diff --git a/csaf_2_1/recommendedTests/recommendedTest_6_2_38.js b/csaf_2_1/recommendedTests/recommendedTest_6_2_38.js new file mode 100644 index 00000000..038b7823 --- /dev/null +++ b/csaf_2_1/recommendedTests/recommendedTest_6_2_38.js @@ -0,0 +1,43 @@ +import Ajv from 'ajv/dist/jtd.js' + +const ajv = new Ajv() + +const inputSchema = /** @type {const} */ ({ + additionalProperties: true, + properties: { + document: { + additionalProperties: true, + properties: { + category: { type: 'string' }, + }, + }, + }, +}) + +const validate = ajv.compile(inputSchema) + +/** + * This implements the recommended test 6.2.38 of the CSAF 2.1 standard. + * +/** + * @param {any} doc + */ +export function recommendedTest_6_2_38(doc) { + /** @type {Array<{ message: string; instancePath: string }>} */ + const warnings = [] + const context = { warnings } + + if (!validate(doc)) { + return context + } + + if (doc.document.category.match(/^csaf_deprecated_.*$/)) { + context.warnings.push({ + message: + 'The document category indicates the usage of a deprecated profile as it starts with "csaf_deprecated_"', + instancePath: '/document/category', + }) + } + + return context +} diff --git a/tests/csaf_2_1/oasis.js b/tests/csaf_2_1/oasis.js index a071b93b..88c5fff7 100644 --- a/tests/csaf_2_1/oasis.js +++ b/tests/csaf_2_1/oasis.js @@ -63,7 +63,6 @@ const excluded = [ '6.2.35', '6.2.36', '6.2.37', - '6.2.38', '6.2.39.1', '6.2.39.2', '6.2.39.3', diff --git a/tests/csaf_2_1/recommendedTest_6_2_38.js b/tests/csaf_2_1/recommendedTest_6_2_38.js new file mode 100644 index 00000000..0a356ce5 --- /dev/null +++ b/tests/csaf_2_1/recommendedTest_6_2_38.js @@ -0,0 +1,11 @@ +import assert from 'node:assert' +import { recommendedTest_6_2_38 } from '../../csaf_2_1/recommendedTests.js' + +describe('recommendedTest_6_2_38', function () { + it('only runs on relevant documents', function () { + assert.equal( + recommendedTest_6_2_38({ vulnerabilities: 'mydoc' }).warnings.length, + 0 + ) + }) +})