function upgradeDocv002to003()

in scripts/misc/upgrade.js [42:148]


function upgradeDocv002to003(doc) {
    if (doc.cve) {
        print('Found ' + doc.cve.CVE_data_meta.ID);
        var source = {};
        var DCCP = doc.cve.CNA_private;
        if (DCCP) {
            delete DCCP.merge_with;
            if (DCCP.defect) {
                source.defect = DCCP.defect;
            }
            delete DCCP.defect;
            if (DCCP.advisoryID) {
                source.advisory = DCCP.advisoryID;
            }
            delete DCCP.advisoryID
            if (DCCP.metadata && DCCP.metadata.source) {
                source.discovery = smap[DCCP.metadata.source];
            }
            doc.cve.source = source;
            delete DCCP.metadata;
            if (DCCP.bundle) {
                delete DCCP.bundle;
            }
            if (doc.cve.CVE_data_meta.DATE_PUBLIC) {
                DCCP.publish = {}
                DCCP.publish.ym = doc.cve.CVE_data_meta.DATE_PUBLIC.substr(0, 7);
                DCCP.publish.year = doc.cve.CVE_data_meta.DATE_PUBLIC.substr(0, 4);
                DCCP.publish.month = doc.cve.CVE_data_meta.DATE_PUBLIC.substr(5, 2);
            }
            //if(DCCP.share_with_CVE) {
            //    delete DCCP.share_with_CVE;
            //}
            if (DCCP.merge_with) {
                delete DCCP.merge_with;
            }
            if (DCCP.state) {
                doc.cve.CVE_data_meta.STATE = statemap[DCCP.state];
                delete DCCP.state;
            }
        }
        // change this code to copy over advisory id from URL to source.advisory field.
/*
        if (doc.cve.references && doc.cve.references.reference_data) {
            var jsa = doc.cve.references.reference_data[0].url.match(/JSA\d+/);
            if (jsa) {
                if (!doc.cve.source.advisory) {
                    doc.cve.source.advisory = jsa[0];
                }
            }
        }
*/
        if (doc.cve.affects && doc.cve.affects.vendor && doc.cve.affects.vendor.vendor_data) {
            for (var vi in doc.cve.affects.vendor.vendor_data) {
                var v = doc.cve.affects.vendor.vendor_data[vi];
                //print(v.vendor_name);
                if (v.product && v.product.product_data) {
                    for (var pi in v.product.product_data) {
                        var p = v.product.product_data[pi];
                        //print(p.product_name);
                        if (p.version && p.version.version_data) {
                            for (var vri in p.version.version_data) {
                                var vr = p.version.version_data[vri];
                                //print(vr.version_value);
                                var k = vr.version_value.match(/(.*)\s+prior\s+to\s+(.*)/i);
                                if (k) {
                                    vr.version_name = k[1];
                                    vr.affected = "<";
                                    vr.version_value = k[2];
                                }
                            }
                        }
                    }
                }
            }
        }
        if (doc.cve.credit)
            var newCredit = [];
        for (ci in doc.cve.credit) {
            var c = doc.cve.credit[ci];
            if (typeof c === 'string' || c instanceof String) {
                newCredit.push({
                    lang: "eng",
                    value: c
                });
            } else {
                newCredit.push(c);
            }
        }
        if (doc.cve.solution instanceof String || typeof doc.cve.solution === 'string') {
            var solution = [{
                lang: "eng",
                "value": doc.cve.solution
                    }];
            doc.cve.solution = solution;
        }
        if (doc.cve.exploit instanceof String || typeof doc.cve.exploit === 'string') {
            var exploit = [{
                lang: "eng",
                "value": doc.cve.exploit
                    }];
            doc.cve.exploit = exploit;
        }
        doc.body = doc.cve;
        delete doc.cve;
    }
    return doc;
}