mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
Issue #12406: prevent case where shortened name could conflict with short name.
This commit is contained in:
parent
dc4170c5bc
commit
61f996b26a
1 changed files with 10 additions and 8 deletions
|
@ -408,7 +408,7 @@ class Directory:
|
||||||
self.physical = physical
|
self.physical = physical
|
||||||
self.logical = logical
|
self.logical = logical
|
||||||
self.component = None
|
self.component = None
|
||||||
self.short_names = sets.Set()
|
self.short_names = {}
|
||||||
self.ids = sets.Set()
|
self.ids = sets.Set()
|
||||||
self.keyfiles = {}
|
self.keyfiles = {}
|
||||||
self.componentflags = componentflags
|
self.componentflags = componentflags
|
||||||
|
@ -456,23 +456,25 @@ class Directory:
|
||||||
[(feature.id, component)])
|
[(feature.id, component)])
|
||||||
|
|
||||||
def make_short(self, file):
|
def make_short(self, file):
|
||||||
|
long = file
|
||||||
file = re.sub(r'[\?|><:/*"+,;=\[\]]', '_', file) # restrictions on short names
|
file = re.sub(r'[\?|><:/*"+,;=\[\]]', '_', file) # restrictions on short names
|
||||||
parts = file.split(".")
|
parts = file.split(".", 1)
|
||||||
if len(parts)>1:
|
if len(parts)>1:
|
||||||
suffix = parts[-1].upper()
|
suffix = parts[1].upper()
|
||||||
else:
|
else:
|
||||||
suffix = None
|
suffix = ''
|
||||||
prefix = parts[0].upper()
|
prefix = parts[0].upper()
|
||||||
if len(prefix) <= 8 and (not suffix or len(suffix)<=3):
|
if len(prefix) <= 8 and '.' not in suffix and len(suffix) <= 3:
|
||||||
if suffix:
|
if suffix:
|
||||||
file = prefix+"."+suffix
|
file = prefix+"."+suffix
|
||||||
else:
|
else:
|
||||||
file = prefix
|
file = prefix
|
||||||
assert file not in self.short_names
|
assert file not in self.short_names, (file, self.short_names[file])
|
||||||
else:
|
else:
|
||||||
prefix = prefix[:6]
|
prefix = prefix[:6]
|
||||||
if suffix:
|
if suffix:
|
||||||
suffix = suffix[:3]
|
# last three characters of last suffix
|
||||||
|
suffix = suffix.rsplit('.')[-1][:3]
|
||||||
pos = 1
|
pos = 1
|
||||||
while 1:
|
while 1:
|
||||||
if suffix:
|
if suffix:
|
||||||
|
@ -484,7 +486,7 @@ class Directory:
|
||||||
assert pos < 10000
|
assert pos < 10000
|
||||||
if pos in (10, 100, 1000):
|
if pos in (10, 100, 1000):
|
||||||
prefix = prefix[:-1]
|
prefix = prefix[:-1]
|
||||||
self.short_names.add(file)
|
self.short_names[file] = long
|
||||||
return file
|
return file
|
||||||
|
|
||||||
def add_file(self, file, src=None, version=None, language=None):
|
def add_file(self, file, src=None, version=None, language=None):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue