diff options
author | 2019-11-09 04:39:53 +0100 | |
---|---|---|
committer | 2019-11-08 20:06:05 -0800 | |
commit | bb6a2ca9ccc8d3d6f7feb7c9ac6b6c2b40ce9d28 (patch) | |
tree | 66b03ca7153e31a9a0b3fee2a0fe3d9668ac22e6 /repoman/lib | |
parent | install.py: ignore -Z / --context (diff) | |
download | portage-bb6a2ca9ccc8d3d6f7feb7c9ac6b6c2b40ce9d28.tar.gz portage-bb6a2ca9ccc8d3d6f7feb7c9ac6b6c2b40ce9d28.tar.bz2 portage-bb6a2ca9ccc8d3d6f7feb7c9ac6b6c2b40ce9d28.zip |
repoman: Fix unsafe string interpolation.
"on line: %d" etc. is no longer included in messages returned from individual checks.
"line %d: " is now consistently added by controller directly after ebuild path
and precedes specific message.
Example:
app-misc/test/test-0.ebuild: line 5: please migrate from 'games' (no replacement)
app-misc/test/test-0.ebuild: line 5: please migrate from 'versionator' to 'eapi7-ver (built-in since EAPI 7)'
app-misc/test/test-0.ebuild: line 10: Useless blank line
app-misc/test/test-0.ebuild: line 20: 'econf' call should be moved to src_configure
Bug: https://bugs.gentoo.org/699508
Signed-off-by: Arfrever Frehtes Taifersar Arahesis <Arfrever@Apache.Org>
Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'repoman/lib')
11 files changed, 30 insertions, 36 deletions
diff --git a/repoman/lib/repoman/modules/linechecks/base.py b/repoman/lib/repoman/modules/linechecks/base.py index 4e3d6f0b4..39d7ebd78 100644 --- a/repoman/lib/repoman/modules/linechecks/base.py +++ b/repoman/lib/repoman/modules/linechecks/base.py @@ -88,9 +88,8 @@ class InheritEclass(LineCheck): if eapi_func is None or not eapi_func(self._eapi): self._func_call = True return ( - '%s.eclass is not inherited, ' - 'but "%s" found at line: %s' % - (self._eclass, func_name, '%d')) + '%s.eclass not inherited, but "%s" called' % + (self._eclass, func_name)) elif not self._func_call: self._func_call = self._func_re.search(line) diff --git a/repoman/lib/repoman/modules/linechecks/controller.py b/repoman/lib/repoman/modules/linechecks/controller.py index 7082a5d02..a3dfd9bd1 100644 --- a/repoman/lib/repoman/modules/linechecks/controller.py +++ b/repoman/lib/repoman/modules/linechecks/controller.py @@ -74,7 +74,7 @@ class LineCheckController(object): def run_checks(self, contents, pkg): '''Run the configured linechecks - @param contents: the ebjuild contents to check + @param contents: the ebuild contents to check @param pkg: the package being checked ''' if self._constant_checks is None: @@ -134,9 +134,13 @@ class LineCheckController(object): if lc.check_eapi(pkg.eapi): ignore = lc.ignore_line if not ignore or not ignore.match(line): - e = lc.check(num, line) - if e: - yield lc.repoman_check_name, e % (num + 1) + errors = lc.check(num, line) + if errors: + if isinstance(errors, (tuple, list)): + for error in errors: + yield lc.repoman_check_name, "line %d: %s" % (num + 1, error) + else: + yield lc.repoman_check_name, "line %d: %s" % (num + 1, errors) for lc in checks: i = lc.end() diff --git a/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py b/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py index 361da09b9..9cef086da 100644 --- a/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py +++ b/repoman/lib/repoman/modules/linechecks/deprecated/inherit.py @@ -37,9 +37,6 @@ class InheritDeprecated(LineCheck): _inherit_re = re.compile(r'^\s*inherit\s(.*)$') - def new(self, pkg): - self._errors = [] - def check(self, num, line): direct_inherits = None m = self._inherit_re.match(line) @@ -51,20 +48,17 @@ class InheritDeprecated(LineCheck): if not direct_inherits: return + errors = [] for eclass in direct_inherits: replacement = self.deprecated_eclasses.get(eclass) if replacement is None: pass elif replacement is False: - self._errors.append( + errors.append( "please migrate from " - "'%s' (no replacement) on line: %d" % (eclass, num + 1)) + "'%s' (no replacement)" % eclass) else: - self._errors.append( + errors.append( "please migrate from " - "'%s' to '%s' on line: %d" % (eclass, replacement, num + 1)) - - def end(self): - for error in self._errors: - yield error - del self._errors + "'%s' to '%s'" % (eclass, replacement)) + return errors diff --git a/repoman/lib/repoman/modules/linechecks/do/dosym.py b/repoman/lib/repoman/modules/linechecks/do/dosym.py index c342d3595..d1aed74d7 100644 --- a/repoman/lib/repoman/modules/linechecks/do/dosym.py +++ b/repoman/lib/repoman/modules/linechecks/do/dosym.py @@ -15,4 +15,4 @@ class EbuildNonRelativeDosym(LineCheck): def check(self, num, line): match = self.regex.match(line) if match: - return "dosym '%s'... could use relative path" % (match.group(1), ) + " on line: %d" + return "dosym '%s'... could use relative path" % match.group(1) diff --git a/repoman/lib/repoman/modules/linechecks/eapi/checks.py b/repoman/lib/repoman/modules/linechecks/eapi/checks.py index de899c061..c53ca3832 100644 --- a/repoman/lib/repoman/modules/linechecks/eapi/checks.py +++ b/repoman/lib/repoman/modules/linechecks/eapi/checks.py @@ -19,7 +19,7 @@ class UndefinedSrcPrepareSrcConfigurePhases(LineCheck): m = self.src_configprepare_re.match(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " phase is not defined in EAPI < 2 on line: %d" + " phase is not defined in EAPI < 2" # EAPI-3 checks @@ -34,7 +34,7 @@ class Eapi3DeprecatedFuncs(LineCheck): m = self.deprecated_commands_re.match(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " has been deprecated in EAPI=3 on line: %d" + " has been deprecated in EAPI=3" # EAPI <4 checks @@ -49,7 +49,7 @@ class UndefinedPkgPretendPhase(LineCheck): m = self.pkg_pretend_re.match(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " phase is not defined in EAPI < 4 on line: %d" + " phase is not defined in EAPI < 4" # EAPI-4 checks @@ -64,7 +64,7 @@ class Eapi4IncompatibleFuncs(LineCheck): m = self.banned_commands_re.match(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " has been banned in EAPI=4 on line: %d" + " has been banned in EAPI=4" class Eapi4GoneVars(LineCheck): @@ -80,4 +80,4 @@ class Eapi4GoneVars(LineCheck): m = self.undefined_vars_re.match(line) if m is not None: return ("variable '$%s'" % m.group(1)) + \ - " is gone in EAPI=4 on line: %d" + " is gone in EAPI=4" diff --git a/repoman/lib/repoman/modules/linechecks/emake/emake.py b/repoman/lib/repoman/modules/linechecks/emake/emake.py index e1e3e638e..e618872e0 100644 --- a/repoman/lib/repoman/modules/linechecks/emake/emake.py +++ b/repoman/lib/repoman/modules/linechecks/emake/emake.py @@ -20,4 +20,4 @@ class WantAutoDefaultValue(LineCheck): m = self._re.match(line) if m is not None: return 'WANT_AUTO' + m.group(1) + \ - ' redundantly set to default value "latest" on line: %d' + ' redundantly set to default value "latest"' diff --git a/repoman/lib/repoman/modules/linechecks/phases/phase.py b/repoman/lib/repoman/modules/linechecks/phases/phase.py index acc3a1e1d..74cf4608f 100644 --- a/repoman/lib/repoman/modules/linechecks/phases/phase.py +++ b/repoman/lib/repoman/modules/linechecks/phases/phase.py @@ -53,7 +53,7 @@ class SrcCompileEconf(PhaseCheck): m = self.configure_re.match(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " call should be moved to src_configure from line: %d" + " call should be moved to src_configure" class SrcUnpackPatches(PhaseCheck): @@ -68,4 +68,4 @@ class SrcUnpackPatches(PhaseCheck): m = self.src_prepare_tools_re.search(line) if m is not None: return ("'%s'" % m.group(1)) + \ - " call should be moved to src_prepare from line: %d" + " call should be moved to src_prepare" diff --git a/repoman/lib/repoman/modules/linechecks/portage/internal.py b/repoman/lib/repoman/modules/linechecks/portage/internal.py index 869337221..bc0564600 100644 --- a/repoman/lib/repoman/modules/linechecks/portage/internal.py +++ b/repoman/lib/repoman/modules/linechecks/portage/internal.py @@ -20,7 +20,7 @@ class PortageInternal(LineCheck): """Run the check on line and return error if there is one""" m = self.re.match(line) if m is not None: - return ("'%s'" % m.group(2)) + " called on line: %d" + return "'%s' called" % m.group(2) class PortageInternalVariableAssignment(LineCheck): @@ -30,8 +30,5 @@ class PortageInternalVariableAssignment(LineCheck): def check(self, num, line): match = self.internal_assignment.match(line) - e = None if match is not None: - e = 'Assignment to variable %s' % match.group(2) - e += ' on line: %d' - return e + return 'Assignment to variable %s' % match.group(2) diff --git a/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py b/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py index 7fd9ba797..5b68f301c 100644 --- a/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py +++ b/repoman/lib/repoman/modules/linechecks/quotes/quoteda.py @@ -13,4 +13,4 @@ class EbuildQuotedA(LineCheck): def check(self, num, line): match = self.a_quoted.match(line) if match: - return "Quoted \"${A}\" on line: %d" + return "Quoted \"${A}\"" diff --git a/repoman/lib/repoman/modules/linechecks/useless/dodoc.py b/repoman/lib/repoman/modules/linechecks/useless/dodoc.py index 502bfbea8..3270af1a9 100644 --- a/repoman/lib/repoman/modules/linechecks/useless/dodoc.py +++ b/repoman/lib/repoman/modules/linechecks/useless/dodoc.py @@ -13,4 +13,4 @@ class EbuildUselessDodoc(LineCheck): def check(self, num, line): match = self.uselessdodoc_re.match(line) if match: - return "Useless dodoc '%s'" % (match.group(2), ) + " on line: %d" + return "Useless dodoc '%s'" % match.group(2) diff --git a/repoman/lib/repoman/modules/linechecks/whitespace/blank.py b/repoman/lib/repoman/modules/linechecks/whitespace/blank.py index 2ab4097a3..1fa3eb2b9 100644 --- a/repoman/lib/repoman/modules/linechecks/whitespace/blank.py +++ b/repoman/lib/repoman/modules/linechecks/whitespace/blank.py @@ -14,7 +14,7 @@ class EbuildBlankLine(LineCheck): def check(self, num, line): if self.line_is_blank and self.blank_line.match(line): - return 'Useless blank line on line: %d' + return 'Useless blank line' if self.blank_line.match(line): self.line_is_blank = True else: |