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)
pgpoxv44vqNjL.pgp
Description: PGP signature