getAffectedProductString: function()

in public/js/util.js [150:232]


getAffectedProductString: function (cve) {
    var status={};
    var lines = [];
    for (var vendor of cve.affects.vendor.vendor_data) {
        var vendor_name = vendor.vendor_name;
        for(var product of vendor.product.product_data) {
            for(var version of product.version.version_data) {
                var vv = version.version_value;
                var cat = "affected";
                if(version.version_affected) {
                    if(version.version_affected.startsWith('?')) {
                        cat = "unknown";
                    } else if (version.version_affected.startsWith('!')) {
                        cat = "unaffected";
                    }
                    var prefix = product.product_name  + " ";
                    if(version.version_name && version.version_name != "") {
                        prefix += version.version_name + " ";
                    }
                    switch (version.version_affected) {
                        case "!":
                        case "?":
                        case "=":
                            vv = version.version_value;
                            break;
                        case "<":
                        case "!<":
                        case "?<":
                            vv = prefix + "versions earlier than " + version.version_value;
                            break;
                        case ">":
                        case "?>":
                            vv = prefix + "versions later than " + version.version_value;
                            break;
                        case "<=":
                        case "!<=":
                        case "?<=":
                            vv = product.product_name  + " " + version.version_value + " and earlier versions";
                            break;
                        case ">=":
                        case "!>=":
                        case "?>=":
                            vv = product.product_name  + " " + version.version_value + " and later versions";
                            break;
                        default:
                            vv = version.version_value;
                    }
                }
                if (version.platform) {
                    vv = vv + " on " + version.platform;
                }
                
                if (!status[cat]) {
                    status[cat] = {};
                }
                // ASF
                if(!status[cat][product.product_name]) {
                    status[cat][product.product_name] = [];
                }
                status[cat][product.product_name].push(vv);
                // END ASF
            }
        }
    }
    var stringifyArray = function(ob) {
        var ret = [];
        for(var p in ob) {
            ret.push(p + "\n" + ob[p].join(';\n') + ".");
        }
        return ret.join('\n');
    }
    var ret = [];
    if (status.affected) {
        ret.push('This issue affects:\n' + stringifyArray(status.affected));
    }
    if (status.unaffected) {
        ret.push('This issue does not affect:\n' + stringifyArray(status.unaffected));
    }
    if (status.unknown) {
        ret.push('It is not known whether this issue affects:\n' + stringifyArray(status.unknown));
    }
    return ret.join('\n\n');
},