Hola.
http://glep.gentoo.org/glep-0031.html        <-- the details
http://bugs.gentoo.org/106544                <-- the bug
http://bugs.gentoo.org/attachment.cgi?=68828 <-- the patch

Attached the patch also; one additional tweak is that file.size is now 
a fatal check, since the tree seem's to finally be clean.
~harring
Index: repoman
===================================================================
--- repoman     (revision 1992)
+++ repoman     (working copy)
@@ -13,6 +13,13 @@
 sys.path = ["/usr/lib/portage/pym"]+sys.path
 version="1.2"  
 
+allowed_filename_chars="a-zA-Z0-9._-+:"
+allowed_filename_chars_set = {}
+map(allowed_filename_chars_set.setdefault, map(chr, range(ord('a'), 
ord('z')+1)))
+map(allowed_filename_chars_set.setdefault, map(chr, range(ord('A'), 
ord('Z')+1)))
+map(allowed_filename_chars_set.setdefault, map(chr, range(ord('0'), 
ord('9')+1)))
+map(allowed_filename_chars_set.setdefault, map(chr, map(ord, [".", "-", "_", 
"+", ":"])))
+
 import string,signal,re,pickle,tempfile
 
 import portage
@@ -21,6 +28,8 @@
 import portage_dep
 import cvstree
 import time
+import codecs
+
 from output import *
 #bold, darkgreen, darkred, green, red, turquoise, yellow
 
@@ -85,6 +94,8 @@
        "filedir.missing":"Package lacks a files directory",
        "file.executable":"Ebuilds, digests, metadata.xml, Manifest, and 
ChangeLog do note need the executable bit",
        "file.size":"Files in the files directory must be under 20k",
+       "file.name":"File/dir name must be composed of only the following 
chars: %s " % allowed_filename_chars,
+       "file.UTF8":"File is not UTF8 compliant",
        "KEYWORDS.missing":"Ebuilds that have a missing KEYWORDS variable",
        "LICENSE.missing":"Ebuilds that have a missing LICENSE variable",
        "DESCRIPTION.missing":"Ebuilds that have a missing DESCRIPTION 
variable",
@@ -146,7 +157,6 @@
 "IUSE.invalid",
 "ebuild.minorsyn",
 "ebuild.badheader",
-"file.size",
 "metadata.missing",
 "metadata.bad",
 "virtual.versioned"
@@ -663,6 +673,29 @@
                                stats["file.executable"] += 1
                                fails["file.executable"].append(checkdir+"/"+y)
        digestlist=[]
+
+       for y in checkdirlist:
+               for c in y.strip(os.path.sep):
+                       if c not in allowed_filename_chars_set:
+                               stats["file.name"] += 1
+                               fails["file.name"].append("%s/%s: char '%s'" % 
(checkdir, y, c))
+                               break
+
+               if not (y in ("ChangeLog", "metadata.xml") or 
y.endswith(".ebuild")):
+                       continue
+               try:
+                       line = 1
+                       for l in codecs.open(y, "r", "utf8"):
+                               line +=1
+               except UnicodeDecodeError, ue:
+                       stats["file.UTF8"] += 1
+                       s = ue.object[:ue.start]
+                       l2 = s.count("\n")
+                       line += l2
+                       if l2 != 0:
+                               s = s[s.rfind("\n") + 1:]
+                       fails["file.UTF8"].append("%s/%s: line %i, just after: 
'%s'" % (checkdir, y, line, s))
+
        if isCvs:
                try:
                        mystat=os.stat(checkdir+"/files")[0]
@@ -799,6 +832,13 @@
                                stats["file.size"] += 1
                                fails["file.size"].append("("+ 
str(mystat.st_size/1024) + "K) "+x+"/files/"+y)
 
+                       for c in y.strip(os.path.sep):
+                               if c not in allowed_filename_chars_set:
+                                       stats["file.name"] += 1
+                                       fails["file.name"].append("%s/%s: char 
'%s'" % (checkdir, y, c))
+                                       break
+
+
        if "ChangeLog" not in checkdirlist:
                stats["changelog.missing"]+=1
                fails["changelog.missing"].append(x+"/ChangeLog")

Attachment: pgpoxv44vqNjL.pgp
Description: PGP signature

Reply via email to