X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fchecks.py;h=14fb02d35628bc0707562cdc4651b49ada5bd72f;hb=c6e6a0c7dc37e77bca124033b77bda4cd6a7e8aa;hp=0a22dde88a2d46bd9dfe8d5d1c4503578e5c326f;hpb=979890d13851a1633b9d47869f7a782cef206d32;p=dak.git diff --git a/daklib/checks.py b/daklib/checks.py index 0a22dde8..14fb02d3 100644 --- a/daklib/checks.py +++ b/daklib/checks.py @@ -43,6 +43,15 @@ import yaml # TODO: replace by subprocess import commands +def check_fields_for_valid_utf8(filename, control): + """Check all fields of a control file for valid UTF-8""" + for field in control.keys(): + try: + field.decode('utf-8') + control[field].decode('utf-8') + except UnicodeDecodeError: + raise Reject('{0}: The {1} field is not valid UTF-8'.format(filename, field)) + class Reject(Exception): """exception raised by failing checks""" pass @@ -160,6 +169,8 @@ class ChangesCheck(Check): if field not in control: raise Reject('{0}: misses mandatory field {1}'.format(fn, field)) + check_fields_for_valid_utf8(fn, control) + source_match = re_field_source.match(control['Source']) if not source_match: raise Reject('{0}: Invalid Source field'.format(fn)) @@ -264,6 +275,8 @@ class BinaryCheck(Check): if field not in control: raise Reject('{0}: Missing mandatory field {0}.'.format(fn, field)) + check_fields_for_valid_utf8(fn, control) + # check fields package = control['Package'] @@ -393,6 +406,8 @@ class SourceCheck(Check): control = source.dsc dsc_fn = source._dsc_file.filename + check_fields_for_valid_utf8(dsc_fn, control) + # check fields if not re_field_package.match(control['Source']): raise Reject('{0}: Invalid Source field'.format(dsc_fn)) @@ -719,7 +734,7 @@ class VersionCheck(Check): if v is not None and not op(version_compare(source_version, v)): raise Reject("Version check failed:\n" "Your upload included the source package {0}, version {1},\n" - "however {3} already has the {4} version {2}.\n" + "however {3} already has version {2}.\n" "Uploads to {5} must have a {4} version than present in {3}." .format(source_name, source_version, v, other_suite.suite_name, op_name, suite.suite_name)) @@ -731,7 +746,7 @@ class VersionCheck(Check): if v is not None and not op(version_compare(binary_version, v)): raise Reject("Version check failed:\n" "Your upload included the binary package {0}, version {1}, for {2},\n" - "however {4} already has the {5} version {3}.\n" + "however {4} already has version {3}.\n" "Uploads to {6} must have a {5} version than present in {4}." .format(binary_name, binary_version, architecture, v, other_suite.suite_name, op_name, suite.suite_name))