# 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
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))
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']
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))
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))
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))