Florian Weimer
2010-May-09 13:59 UTC
[Secure-testing-commits] r14653 - in lib/python: sectracker sectracker_test
Author: fw Date: 2010-05-09 13:59:28 +0000 (Sun, 09 May 2010) New Revision: 14653 Modified: lib/python/sectracker/parsers.py lib/python/sectracker_test/test_parsers.py Log: sectracker.parsers._annotationdispatcher: return annotation No longer pass in the list to add to. Modified: lib/python/sectracker/parsers.py ==================================================================--- lib/python/sectracker/parsers.py 2010-05-09 11:39:28 UTC (rev 14652) +++ lib/python/sectracker/parsers.py 2010-05-09 13:59:28 UTC (rev 14653) @@ -23,7 +23,7 @@ import sectracker.xpickle as _xpickle import sectracker.diagnostics -FORMAT = "3" +FORMAT = "4" def _sortedtuple(seq): l = list(seq) @@ -129,56 +129,55 @@ @_regexpcase.rule(r''(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)\s*'' + r''(?:\s([A-Za-z0-9:.+~-]+)\s*)?(?:\s\((.*)\))?'') - def package_version(groups, diag, anns): + def package_version(groups, diag): release, package, version, inner = groups inner = parseinner(diag, inner) if version is None: kind = "unfixed" else: kind = "fixed" - anns.append(PackageAnnotation( - *((diag.line(), "package", release, package, kind, - version, None) + inner))) + return PackageAnnotation( + *((diag.line(), "package", release, package, kind, + version, None) + inner)) pseudo_freetext = "no-dsa not-affected end-of-life".split() pseudo_struct = set("unfixed removed itp undetermined".split()) @_regexpcase.rule(r''(?:\[([a-z]+)\]\s)?-\s([A-Za-z0-9:.+-]+)'' + r''\s+<([a-z-]+)>\s*(?:\s\((.*)\))?'') - def package_pseudo(groups, diag, anns): + def package_pseudo(groups, diag): release, package, version, inner = groups if version in pseudo_freetext: - anns.append(PackageAnnotation( - diag.line(), "package", release, package, version, - None, inner, None, (), False)) + return PackageAnnotation( + diag.line(), "package", release, package, version, + None, inner, None, (), False) elif version in pseudo_struct: inner = parseinner(diag, inner) if version == "itp" and not inner[1]: diag.error("<itp> needs Debian bug reference") - anns.append(PackageAnnotation( - *((diag.line(), "package", release, package, version, - None, None) + inner))) + return PackageAnnotation( + *((diag.line(), "package", release, package, version, + None, None) + inner)) else: diag.error("invalid pseudo-version: " + repr(version)) + return None @_regexpcase.rule(r''\{(.*)\}'') - def xref(groups, diag, anns): + def xref(groups, diag): x = _sortedtuple(groups[0].strip().split()) if x: - anns.append(XrefAnnotation(diag.line(), "xref", x)) + return XrefAnnotation(diag.line(), "xref", x) else: diag.error("empty cross-reference") + return None return _regexpcase.RegexpCase( ((r''(RESERVED|REJECTED)'', - lambda groups, diag, anns: - anns.append(FlagAnnotation(diag.line(), groups[0]))), + lambda groups, diag: FlagAnnotation(diag.line(), groups[0])), (r''(NOT-FOR-US|NOTE|TODO):\s+(\S.*)'', - lambda groups, diag, anns: - anns.append(StringAnnotation(diag.line(), *groups))), + lambda groups, diag: StringAnnotation(diag.line(), *groups)), package_version, package_pseudo, xref), prefix=r"\s+", suffix=r"\s*", - default=lambda text, diag, anns: - diag.error("invalid annotation")) + default=lambda text, diag: diag.error("invalid annotation")) _annotationdispatcher = _annotationdispatcher() List = _namedtuple("List", "list messages") @@ -201,7 +200,9 @@ if header is None: diag.error("header expected") continue - _annotationdispatcher(line, diag, anns) + ann = _annotationdispatcher(line, diag) + if ann is not None: + anns.append(ann) else: if header is not None: bugs.append(finish(header, headerlineno, anns, diag)) Modified: lib/python/sectracker_test/test_parsers.py ==================================================================--- lib/python/sectracker_test/test_parsers.py 2010-05-09 11:39:28 UTC (rev 14652) +++ lib/python/sectracker_test/test_parsers.py 2010-05-09 13:59:28 UTC (rev 14653) @@ -114,14 +114,9 @@ (Message("CVE", 17, "error", "invalid pseudo-version: ''garbled''"),)), ]: - anns = [] diag = sectracker.diagnostics.Diagnostics() diag.setlocation("CVE", 17) - p._annotationdispatcher(line, diag, anns) + r = p._annotationdispatcher(line, diag) msgs = diag.messages() assert tuple(msgs) == xmsgs, repr(msgs) - if anns: - r = anns[0] - else: - r = None - assert r == res, repr(anns) + assert r == res, repr(r)