@@ -421,6 +421,83 @@ def advisory_data(self) -> List[AdvisoryData]:
421421 )
422422 continue
423423
424+ # def get_data_from_xml_doc(
425+ # self, xml_doc: ET.ElementTree, pkg_metadata={}
426+ # ) -> Iterable[AdvisoryData]:
427+ # """
428+ # The orchestration method of the OvalDataSource. This method breaks an
429+ # OVAL xml ElementTree into a list of `Advisory`.
430+
431+ # Note: pkg_metadata is a mapping of Package URL data that MUST INCLUDE
432+ # "type" key.
433+
434+ # Example value of pkg_metadata:
435+ # {"type":"deb","qualifiers":{"distro":"buster"} }
436+ # """
437+ # oval_parsed_data = OvalParser(self.translations, xml_doc)
438+ # raw_data = oval_parsed_data.get_data()
439+ # oval_doc = oval_parsed_data.oval_document
440+ # timestamp = oval_doc.getGenerator().getTimestamp()
441+
442+ # print("\noval_parsed_data = {}\n".format(oval_parsed_data))
443+ # print("\nraw_data = {}\n".format(raw_data))
444+
445+ # # convert definition_data to Advisory objects
446+ # for definition_data in raw_data:
447+ # print("\ndefinition_data = {}\n".format(definition_data))
448+ # # These fields are definition level, i.e common for all elements
449+ # # connected/linked to an OvalDefinition
450+
451+ # # TODO: 2023-01-24 Tuesday 22:34:20. Is this where we'd loop through the list of CVEs/aliases?
452+
453+ # vuln_id = definition_data["vuln_id"]
454+ # description = definition_data["description"]
455+
456+ # severities = []
457+ # severity = definition_data.get("severity")
458+ # if severity:
459+ # severities.append(
460+ # VulnerabilitySeverity(system=severity_systems.GENERIC, value=severity)
461+ # )
462+ # references = [
463+ # Reference(url=url, severities=severities)
464+ # for url in definition_data["reference_urls"]
465+ # ]
466+ # affected_packages = []
467+ # print('\ndefinition_data["test_data"] = {}\n'.format(definition_data["test_data"]))
468+ # for test_data in definition_data["test_data"]:
469+ # print("\ntest_data['package_list'] = {}\n".format(test_data["package_list"]))
470+ # for package_name in test_data["package_list"]:
471+ # affected_version_range = test_data["version_ranges"]
472+ # vrc = RANGE_CLASS_BY_SCHEMES[pkg_metadata["type"]]
473+ # if affected_version_range:
474+ # try:
475+ # affected_version_range = vrc.from_native(affected_version_range)
476+ # except Exception as e:
477+ # logger.error(
478+ # f"Failed to parse version range {affected_version_range!r} "
479+ # f"for package {package_name!r}:\n{e}"
480+ # )
481+ # continue
482+ # if package_name:
483+ # affected_packages.append(
484+ # AffectedPackage(
485+ # package=self.create_purl(package_name, pkg_metadata),
486+ # affected_version_range=affected_version_range,
487+ # )
488+ # )
489+ # print("affected_packages = {}".format(affected_packages))
490+ # date_published = dateparser.parse(timestamp)
491+ # if not date_published.tzinfo:
492+ # date_published = date_published.replace(tzinfo=pytz.UTC)
493+ # yield AdvisoryData(
494+ # aliases=[vuln_id],
495+ # summary=description,
496+ # affected_packages=sorted(affected_packages),
497+ # references=sorted(references),
498+ # date_published=date_published,
499+ # )
500+
424501 def get_data_from_xml_doc (
425502 self , xml_doc : ET .ElementTree , pkg_metadata = {}
426503 ) -> Iterable [AdvisoryData ]:
@@ -450,50 +527,54 @@ def get_data_from_xml_doc(
450527
451528 # TODO: 2023-01-24 Tuesday 22:34:20. Is this where we'd loop through the list of CVEs/aliases?
452529
453- vuln_id = definition_data ["vuln_id" ]
454- description = definition_data ["description" ]
455-
456- severities = []
457- severity = definition_data .get ("severity" )
458- if severity :
459- severities .append (
460- VulnerabilitySeverity (system = severity_systems .GENERIC , value = severity )
461- )
462- references = [
463- Reference (url = url , severities = severities )
464- for url in definition_data ["reference_urls" ]
465- ]
466- affected_packages = []
467- print ('\n definition_data["test_data"] = {}\n ' .format (definition_data ["test_data" ]))
468- for test_data in definition_data ["test_data" ]:
469- print ("\n test_data['package_list'] = {}\n " .format (test_data ["package_list" ]))
470- for package_name in test_data ["package_list" ]:
471- affected_version_range = test_data ["version_ranges" ]
472- vrc = RANGE_CLASS_BY_SCHEMES [pkg_metadata ["type" ]]
473- if affected_version_range :
474- try :
475- affected_version_range = vrc .from_native (affected_version_range )
476- except Exception as e :
477- logger .error (
478- f"Failed to parse version range { affected_version_range !r} "
479- f"for package { package_name !r} :\n { e } "
530+ vuln_id_list = definition_data ["vuln_id" ]
531+
532+ for vuln_id_item in vuln_id_list :
533+ # vuln_id = definition_data["vuln_id"]
534+ vuln_id = vuln_id_item
535+ description = definition_data ["description" ]
536+
537+ severities = []
538+ severity = definition_data .get ("severity" )
539+ if severity :
540+ severities .append (
541+ VulnerabilitySeverity (system = severity_systems .GENERIC , value = severity )
542+ )
543+ references = [
544+ Reference (url = url , severities = severities )
545+ for url in definition_data ["reference_urls" ]
546+ ]
547+ affected_packages = []
548+ print ('\n definition_data["test_data"] = {}\n ' .format (definition_data ["test_data" ]))
549+ for test_data in definition_data ["test_data" ]:
550+ print ("\n test_data['package_list'] = {}\n " .format (test_data ["package_list" ]))
551+ for package_name in test_data ["package_list" ]:
552+ affected_version_range = test_data ["version_ranges" ]
553+ vrc = RANGE_CLASS_BY_SCHEMES [pkg_metadata ["type" ]]
554+ if affected_version_range :
555+ try :
556+ affected_version_range = vrc .from_native (affected_version_range )
557+ except Exception as e :
558+ logger .error (
559+ f"Failed to parse version range { affected_version_range !r} "
560+ f"for package { package_name !r} :\n { e } "
561+ )
562+ continue
563+ if package_name :
564+ affected_packages .append (
565+ AffectedPackage (
566+ package = self .create_purl (package_name , pkg_metadata ),
567+ affected_version_range = affected_version_range ,
568+ )
480569 )
481- continue
482- if package_name :
483- affected_packages .append (
484- AffectedPackage (
485- package = self .create_purl (package_name , pkg_metadata ),
486- affected_version_range = affected_version_range ,
487- )
488- )
489- print ("affected_packages = {}" .format (affected_packages ))
490- date_published = dateparser .parse (timestamp )
491- if not date_published .tzinfo :
492- date_published = date_published .replace (tzinfo = pytz .UTC )
493- yield AdvisoryData (
494- aliases = [vuln_id ],
495- summary = description ,
496- affected_packages = sorted (affected_packages ),
497- references = sorted (references ),
498- date_published = date_published ,
499- )
570+ print ("affected_packages = {}" .format (affected_packages ))
571+ date_published = dateparser .parse (timestamp )
572+ if not date_published .tzinfo :
573+ date_published = date_published .replace (tzinfo = pytz .UTC )
574+ yield AdvisoryData (
575+ aliases = [vuln_id ],
576+ summary = description ,
577+ affected_packages = sorted (affected_packages ),
578+ references = sorted (references ),
579+ date_published = date_published ,
580+ )
0 commit comments