From 4a2e805dbaf649b72868ff46a7ab131c5e5788fe Mon Sep 17 00:00:00 2001 From: Ansgar Burchardt Date: Sun, 4 Aug 2013 15:58:06 +0200 Subject: [PATCH] daklib/checks.py: make sure all fields in control files are UTF-8 Reference: http://bugs.debian.org/717851 --- daklib/checks.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/daklib/checks.py b/daklib/checks.py index fc3bb22f..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)) -- 2.39.5