From 43c0b95eaf91b77daccded5ac32c5fa67c9d72c8 Mon Sep 17 00:00:00 2001
From: Joerg Jaspert <joerg@debian.org>
Date: Sat, 19 Apr 2008 23:20:49 +0200
Subject: [PATCH] Sanity check the provides field

---
 ChangeLog                |  5 +++++
 dak/process_unchecked.py | 11 +++++++++++
 2 files changed, 16 insertions(+)

diff --git a/ChangeLog b/ChangeLog
index 65e898eb..c6b4a9e2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2008-04-19  Joerg Jaspert  <joerg@debian.org>
+
+	* dak/process_unchecked.py (check_files): Sanity check the
+	provides field, which closes #472783
+
 2008-04-18  Joerg Jaspert  <joerg@debian.org>
 
 	* config/debian/dak.conf: Add mapping stable-proposed-updates
diff --git a/dak/process_unchecked.py b/dak/process_unchecked.py
index 30737ed1..0b8241e4 100755
--- a/dak/process_unchecked.py
+++ b/dak/process_unchecked.py
@@ -44,6 +44,7 @@ re_valid_pkg_name = re.compile(r"^[\dA-Za-z][\dA-Za-z\+\-\.]+$")
 re_changelog_versions = re.compile(r"^\w[-+0-9a-z.]+ \([^\(\) \t]+\)")
 re_strip_revision = re.compile(r"-([^-]+)$")
 re_strip_srcver = re.compile(r"\s+\(\S+\)$")
+re_spacestrip = re.compile('(\s)')
 
 ################################################################################
 
@@ -461,6 +462,16 @@ def check_files():
             if depends == '':
                 reject("%s: Depends field is empty." % (file))
 
+            # Sanity-check the Provides field
+            provides = re_spacestrip.sub('', control.Find("Provides"))
+            if provides == '':
+                reject("%s: Provides field is empty." % (file))
+            prov_list = provides.split(",")
+            for prov in prov_list:
+                if not re_valid_pkg_name.match(prov):
+                    reject("%s: Invalid Provides field content %s." % (file, prov))
+
+
             # Check the section & priority match those given in the .changes (non-fatal)
             if control.Find("Section") and files[file]["section"] != "" and files[file]["section"] != control.Find("Section"):
                 reject("%s control file lists section as `%s', but changes file has `%s'." % (file, control.Find("Section", ""), files[file]["section"]), "Warning: ")
-- 
2.39.5