check-package: check *.hash files

Check each hash entry (see [1]) and warn when:
- it does not have three fields;
- its type is unknown;
- its length does not match its type;
- the name of the file contains a directory component.

[1] http://nightly.buildroot.org/#adding-packages-hash

Signed-off-by: Ricardo Martincoski <ricardo.martincoski@gmail.com>
Cc: Thomas De Schampheleire <patrickdepinguin@gmail.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
This commit is contained in:
Ricardo Martincoski 2017-02-19 19:17:19 -03:00 committed by Thomas Petazzoni
parent c6bf3239cb
commit 6c931bbf5f

View File

@ -3,8 +3,70 @@
# functions don't need to check for things already checked by running # functions don't need to check for things already checked by running
# "make package-dirclean package-source". # "make package-dirclean package-source".
import re
from checkpackagebase import _CheckFunction
# Notice: ignore 'imported but unused' from pyflakes for check functions. # Notice: ignore 'imported but unused' from pyflakes for check functions.
from checkpackagelib import ConsecutiveEmptyLines from checkpackagelib import ConsecutiveEmptyLines
from checkpackagelib import EmptyLastLine from checkpackagelib import EmptyLastLine
from checkpackagelib import NewlineAtEof from checkpackagelib import NewlineAtEof
from checkpackagelib import TrailingSpace from checkpackagelib import TrailingSpace
def _empty_line_or_comment(text):
return text.strip() == "" or text.startswith("#")
class HashFilename(_CheckFunction):
def check_line(self, lineno, text):
if _empty_line_or_comment(text):
return
fields = text.split()
if len(fields) < 3:
return
if '/' in fields[2]:
return ["{}:{}: use filename without directory component"
" ({}#adding-packages-hash)"
.format(self.filename, lineno, self.url_to_manual),
text]
class HashNumberOfFields(_CheckFunction):
def check_line(self, lineno, text):
if _empty_line_or_comment(text):
return
fields = text.split()
if len(fields) != 3:
return ["{}:{}: expected three fields ({}#adding-packages-hash)"
.format(self.filename, lineno, self.url_to_manual),
text]
class HashType(_CheckFunction):
len_of_hash = {"md5": 32, "sha1": 40, "sha224": 56, "sha256": 64,
"sha384": 96, "sha512": 128}
def check_line(self, lineno, text):
if _empty_line_or_comment(text):
return
fields = text.split()
if len(fields) < 2:
return
htype, hexa = fields[:2]
if htype == "none":
return
if htype not in self.len_of_hash.keys():
return ["{}:{}: unexpected type of hash ({}#adding-packages-hash)"
.format(self.filename, lineno, self.url_to_manual),
text]
if not re.match("^[0-9A-Fa-f]{%s}$" % self.len_of_hash[htype], hexa):
return ["{}:{}: hash size does not match type "
"({}#adding-packages-hash)"
.format(self.filename, lineno, self.url_to_manual),
text,
"expected {} hex digits".format(self.len_of_hash[htype])]